1
在Python中使用多处理并且您正在导入模块时,为什么模块中的任何实例变量都会通过副本传递给子进程,而参数args()
中传递的参数是通过引用传递的。使用多处理模块时未看到对对象属性所做的更改
这是否与线程安全有关?
foo.py
class User:
def __init__(self, name):
self.name = name
foo_user = User('foo')
main.py
import multiprocessing
from foo import User, foo_user
def worker(main_foo):
print(main_foo.name) #prints 'main user'
print(foo_user.name) #prints 'foo user', why doesn't it print 'override'
if __name__ == '__main__':
main_foo = User('main user')
foo_user.name = 'override'
p = multiprocessing.Process(target=worker, args=(main_foo,))
p.start()
p.join()
编辑:我是个白痴,self.name = None
应该已经self.name = name
。我在代码中进行了更正,忘记将其复制过来。
请参阅编辑 – dangel