我有这个:
#!/usr/bin/env python
import multiprocessing
class MultiprocessingTest(object):
def __init__(self):
self.cmd = ''
def for_process_A(self):
self.cmd = "AA"
print "%s executing and cmd is %s" % (multiprocessing.current_process().name, self.cmd)
def for_process_B(self):
self.cmd = "BB"
print "%s executing and cmd is %s" % (multiprocessing.current_process().name, self.cmd)
if __name__ == '__main__':
obj = MultiprocessingTest()
process_A = multiprocessing.Process(target=obj.for_process_A, name='process_A')
process_B = multiprocessing.Process(target=obj.for_process_B, name='process_B')
process_A.start()
process_B.start()
process_A.join()
process_B.join()
问题:
这两个进程是否共享变量cmd
?
这两个进程是否都有一个单独的类MultiprocessingTest
定义并且可以解决这个问题?
两个流程中存在哪些数据的独立副本?
我试图从理论的角度理解这里实际发生了什么。你能评论一下吗?
测试运行o / p:
$ ./commonvar.py
process_A executing and cmd is AA
process_B executing and cmd is BB
答案 0 :(得分:1)
进程不共享数据。每个流程都是一个单独的容器,其中包含以下资源:
流程通过管道与外界互动。
所以回答你的问题:
cmd
变量。进一步说明:
在幕后,fork system call用于创建进程(假设您正在使用* nix)。由于switching the conext中涉及的开销,与线程相比,进程更重。
答案 1 :(得分:0)
多处理内部发生的更改不应传播回调用“线程”(或任何其他多处理进程)。如果您想要那种“共享内存”行为,则需要考虑使用multiprocessing.Manager
。