如何在没有队列的情况下更改多处理中的类值



我可以在新流程中更改值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

我希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新