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