用python多进程模块multiprocessing创建的子进程如何共享内存空间?
发布网友
发布时间:2022-04-19 02:41
我来回答
共2个回答
热心网友
时间:2022-04-19 04:10
进程传递数据最简单方便的是通过Queue。这样你的自建类对象就可以放到队列中,由子进程获取。
到于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()