gpt4 book ai didi

python - 在python中跨多个进程共享类变量

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:26 24 4
gpt4 key购买 nike

我有一个声明为列表的类变量,我想从该类中声明的方法更新该变量。然而,由于此方法处理大量数据,我使用多重处理来调用它,因此我需要在更新类变量之前对其进行锁定。我无法弄清楚如何放置这样的锁并更新类变量。如果重要的话,我在任何给定时间只创建该类的一个对象。

最佳答案

由于Python的GIL,多处理只能用于完全独立的任务,并且没有共享内存。但您仍然可以通过使用多处理共享数组/值来实现它:

来自 https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

from multiprocessing import Process, Value, Array

def f(n, a):
n.value = 3.1415927
for i in range(len(a)):
a[i] = -a[i]

if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10))

p = Process(target=f, args=(num, arr))
p.start()
p.join()

print num.value
print arr[:]

现在,正如您所要求的,您需要确保不同的进程不会同时访问同一变量,并使用Lock。希望 multiprocessing 模块中可用的所有共享变量都与锁配对。

访问锁:

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

我希望这会有所帮助。

关于python - 在python中跨多个进程共享类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383195/

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