我可以在新流程中更改值var1
吗?
class A:
var1 = 0
method2():
var1 += 1
method1():
p = multiprocessing.Process(method2)
p.start()
p.join()
print(var1)
调用method1()。 var1
没有改变。
A().method1()
>>> 0
顺便说一句,我无法使用Queues
答案 0 :(得分:2)
由于python的GIL,多处理只能用于完全独立的任务,而不能使用共享内存。因此,当您创建流程p
时,它会复制A
实例的值,并更改此复制实例中var1
的值,而不会修改原始实例。
但是你仍然可以通过使用多处理共享数组/值来实现它:
来自https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes
from multiprocessing import Value
var1 = Value('d', 0.0)
您需要确保不同的进程不会同时访问同一个变量,并使用Lock
。 Hopefuly,multiprocessing
模块中可用的所有共享变量都与Lock配对。
要访问锁定:
var1.acquire() # get the lock
# do stuff
var1.release() # don't forget to release it
我希望这会有所帮助。