【发布时间】:2021-07-07 21:41:07
【问题描述】:
对我来说很奇怪,“spawn”过程不会复制类的静态变量,但是使用“fork”一切都可以。
代码:
import typing as t
import multiprocessing as mp
from concurrent.futures import ProcessPoolExecutor
class Foo:
static_var: int
def __init__(self):
pass
def func(foo_class: t.Type[Foo]):
return foo_class.static_var
if __name__ == "__main__":
# with ProcessPoolExecutor(mp_context=mp.get_context("fork")) as executor:
with ProcessPoolExecutor(mp_context=mp.get_context("spawn")) as executor:
foo_class = Foo
foo_class.static_var = 10
res = executor.map(func, [foo_class, foo_class])
print(list(res))
print('Done')
输出“分叉”:
[10, 10]
Done
输出“spawn”:
AttributeError: type object 'Foo' has no attribute 'static_var'
Python 版本:3.8.5
我不知道如何通过 spawn 来克服它(而且我不完全理解为什么它不起作用)。生成过程再次启动自己的解释器和导入模块(和类?),这就是为什么没有初始化静态变量? 如何通过类传递变量?
【问题讨论】:
标签: python process multiprocessing spawn static-variables