我有一个声明为列表的类变量,我想从该类中声明的方法进行更新。但是,由于此方法处理大量数据,因此我使用多重处理来调用它,因此在更新它之前需要锁定类变量。我无法弄清楚如何放置这样的锁并更新类变量。如果很重要,我在任何给定时间都只创建一个上述类的对象。
由于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[:]
现在,按照您的要求,您需要确保differents进程不会同时访问同一变量,并使用Lock
。希望所有multiprocessing
模块中可用的共享变量都与一个锁配对。
要访问锁:
num.acquire() # get the lock
# do stuff
num.release() # don't forget to release it
我希望这有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句