用python多进程模块multiprocessing创建的子进程如何共享内存空间?
网上看到很多方法有Manager,Array等等,但是我想传递的是python中的一个自建类的对象,应该如何实现?比如importmultiprocessingasmcl...
网上看到很多方法有Manager,Array等等,但是我想传递的是python中的一个自建类的对象,应该如何实现?
比如
import multiprocessing as m
class Person:
def __init__(self,name):
self.name=name
def report(person):
print(person.name)
person=Person('steve')
p=m.Process(target=report,args=(person,))
p.start()
没有任何反应。为什么? 展开
比如
import multiprocessing as m
class Person:
def __init__(self,name):
self.name=name
def report(person):
print(person.name)
person=Person('steve')
p=m.Process(target=report,args=(person,))
p.start()
没有任何反应。为什么? 展开
1个回答
展开全部
进程传递数据最简单方便的是通过Queue。这样你的自建类对象就可以放到队列中,由子进程获取。
到于Array, Var等方法,那是给高效数据共享用的。共享内存是进程通信的高级技巧。需要高性能计算的时候再研究这些方法。
Pool, Manager之类是一种封装。用得反而比较少。
python与C++共享内存里,还会使用一种Numpy中的数组。那个效率更高。
你的程序中子进程及传递参数都没有问题。你少了一句。在后面要加上
p.join()就可以了
如果不加,那么你的主进程不等子进程,它先退出了,往往操作系统会自动把子进程也杀掉。
另外子进程中的print输出有延时。即使你用sys.stdout.flush(),有时候它也会有延时。
到于Array, Var等方法,那是给高效数据共享用的。共享内存是进程通信的高级技巧。需要高性能计算的时候再研究这些方法。
Pool, Manager之类是一种封装。用得反而比较少。
python与C++共享内存里,还会使用一种Numpy中的数组。那个效率更高。
你的程序中子进程及传递参数都没有问题。你少了一句。在后面要加上
p.join()就可以了
如果不加,那么你的主进程不等子进程,它先退出了,往往操作系统会自动把子进程也杀掉。
另外子进程中的print输出有延时。即使你用sys.stdout.flush(),有时候它也会有延时。
追问
仍然没有反应啊。。
追答
你不要在IDLE里调试多进程程序,没有用的。还容易误判。要在命令行下直接运行。
import multiprocessing as m
import sys
class Person:
def __init__(self,name):
print "init"
self.name=name
def report(person):
print "report"
print(person.name)
sys.stdout.flush()
def main():
person=Person('steve')
p=m.Process(target=report,args=(person,))
p.start()
print "wait"
p.join()
print "end"
if __name__=="__main__":
main()
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询