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