为什么不能使用类的成员变量执行多进程?



我用python 3.6和python 3.7测试了两个案例的代码。

1个案例(使用类别的成员变量

import multiprocessing as mp
import sys
class Foo:
def do_multiprocessing(self):
ctx = mp.get_context('spawn')
self.process_1 = ctx.Process(target=self.do_stuff1)
self.process_2 = ctx.Process(target=self.do_stuff2)
self.process_1.start()
self.process_2.start()
def do_stuff1(self):
print("Doing 1")
def do_stuff2(self):
print("Doing 2")
if __name__ == "__main__":
print("PYTHON VERSION : ", sys.version)
foo = Foo()
foo.do_multiprocessing()

结果:当我使用python 3.6执行它时,运行良好。然而,当我使用python 3.7执行它时,出现了一个错误。(类型错误:无法抓取weakref对象(

2种情况(使用局部变量

import multiprocessing as mp
import sys
class Foo:
def do_multiprocessing(self):
ctx = mp.get_context('spawn')
process_1 = ctx.Process(target=self.do_stuff1)
process_2 = ctx.Process(target=self.do_stuff2)
process_1.start()
process_2.start()
def do_stuff1(self):
print("Doing 1")
def do_stuff2(self):
print("Doing 2")
if __name__ == "__main__":
print("PYTHON VERSION : ", sys.version)
foo = Foo()
foo.do_multiprocessing()

结果:当我使用python 3.6和python 3.7执行它时,运行良好。

为什么不能使用类的成员变量执行多进程?为什么可以使用局部变量执行多进程?

我不明白为什么要执行代码。

p.s.(如果使用mp.get_context('fork'(,那么在案例1中使用python3.6和python3.7的代码可以很好地工作。

通过将self.do_stuff2传递给process_2,您试图让该进程访问self的整个(作为隐式参数(,其中包括self.process_1。您可以看到,让一个子进程对另一个子进程进行有意义的访问可能会很复杂(除非您让操作系统用'fork'复制整个(父(进程(。

相关内容

  • 没有找到相关文章

最新更新