簡體   English   中英

在python中的多個進程之間共享類變量

[英]Share a class variable across multiple processes in python

我有一個類變量聲明為列表,我想從該類中聲明的方法進行更新。 但是,由於此方法處理大量數據,因此我使用多重處理來調用它,因此在更新它之前需要鎖定類變量。 我無法弄清楚如何放置這樣的鎖並更新類變量。 如果很重要,我在任何給定時間都只創建一個上述類的對象。

由於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

我希望這有幫助。

如果您使用的是多處理模塊(與之不同的是多線程 ),那么除非我沒有記錯,否則分叉的多個進程不會共享內存,並且每個進程都有自己的類副本。 這將意味着將不需要鎖,但也將意味着不會像您希望的那樣共享class屬性。

多處理模塊確實提供了幾種方法來允許進程之間進行通信,包括共享數組對象。 也許這就是您要尋找的。

根據您的工作,您可能還考慮使用master-worker模式,在該模式中創建一個帶有方法的工作程序類,以操縱數據的方法,產生幾個運行該類的過程,然后從主程序中將數據集分發給工作程序使用來自多處理模塊的Queue類進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM