【发布时间】:2020-03-23 00:11:40
【问题描述】:
似乎可行,但是在分叉后使用self 是否安全?还是应该始终通过args 将参数作为函数参数传递给子进程?
import multiprocessing as mp
class C():
def __init__(self):
self.v = 'bla'
p = mp.Process(target=self.worker, args=[])
#p = mp.Process(target=self.worker, args=(self.v,))
p.start()
p.join()
def worker(self):
print(self.v)
#def worker(self, v):
#print(v)
c = C()
# prints 'bla'
更具体地说,我想传递 manager.Queue() 对象,不确定是否有区别。
如果这是一个简单的 C fork(),因为整个过程复制相同 - 除了 pid -,self 将是相同的。但是 Python 多处理可能正在做一些我不知道的事情,或者在某处可能会出现警告,例如“不要这样使用它,这可能会在未来发生变化”。我没有找到任何专门解决这个问题的东西。
我真正担心的是args 中传递的参数,特别是如果它们与多处理模块相关联,可能会围绕 fork() 进行转换以避免任何问题。
Python 3.6.5
【问题讨论】:
标签: python python-3.x class multiprocessing fork