gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:03:04 24 4
gpt4 key购买 nike

我可以在新进程中更改值var1吗?

class A: 
var1 = 0

method2():
var1 += 1

method1():
p = multiprocessing.Process(method2)
p.start()
p.join()
print(var1)

调用方法1()。 var1 没有改变。

A().method1()
>>> 0

顺便说一句,我无法使用队列

最佳答案

由于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。希望 multiprocessing 模块中可用的所有共享变量都与锁配对。

访问锁:

var1.acquire() # get the lock
# do stuff
var1.release() # don't forget to release it

我希望这会有所帮助。

关于python - 如何在没有队列的情况下更改多处理中的类值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com