我有一個類變量聲明爲列表,我想從該類中聲明的方法更新。然而,由於這個方法處理大量的數據,我正在使用多處理來調用它,因此我需要在更新它之前鎖定類變量。我無法弄清楚如何放置這樣的鎖並更新類變量。如果重要的話,我只能在任何時候創造上述課程的一個目標。在Python中的多個進程中共享一個類變量
1
A
回答
1
由於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
模塊中的所有共享變量都與Lock配對。
要訪問鎖:
num.acquire() # get the lock
# do stuff
num.release() # don't forget to release it
我希望這有助於。
0
如果您使用的multiprocessing模塊(相對於多線程,這是不同的),那麼除非我弄錯了,分叉多進程不共享內存,每個進程將有自己的副本你的班級。這將意味着鎖定不是必需的,但這也意味着類屬性不會像您希望的那樣共享。
多處理模塊確實提供several ways以允許進程之間的通信,包括共享數組對象。也許這就是你要找的。
根據你在做什麼,你也可以考慮使用master-worker模式,你可以在其中創建一個工作類,並使用方法來操作你的數據,產生幾個進程來運行這個類,然後將數據集發送到來自主進程的工作人員使用多處理模塊中的Queue類。
相關問題
- 1. python多處理,做進程共享一個公共變量?
- 2. 如何在Python中的兩個進程之間共享一個變量?
- 3. Python 3:在一個類中的方法之間共享變量
- 4. 在多個會話中共享變量
- 5. 在多個線程中改變一個共享的可變變量
- 6. Python:在多個類之間共享類變量
- 7. 在Java中共享一個ThreadLocal變量
- 8. 在Python中的兩個類之間共享變量
- 9. python多處理中的共享變量
- 10. Python多處理:如何在多個進程中共享一個字典?
- 11. 在Python中的兩個線程之間共享變量
- 12. 在多個node.js中共享一個端口HTTP進程
- 13. 在asp.net應用程序中共享一個全局變量到一個類
- 14. 如何在單獨的Python進程中共享一個字典?
- 15. 如何在Python中爲多個進程啓動和共享一個且只有一個單獨的進程?
- 16. 多個服務共享一個進程,多少個「主」線程?
- 17. 共享庫/ dll中的全局變量,跨進程共享
- 18. 在多個進程使用的共享庫中更新全局變量
- 19. 在一個類中的進程之間共享大數據
- 20. 如何在多種方法中共享一個變量?
- 21. 如何在Mapper和Reducer類中共享一個變量?
- 22. 共享多個變量<script>中的JS變量
- 23. 多線程共享變量
- 24. 多線程共享變量
- 25. python中的進程共享什麼變量?
- 26. 在2個ViewControllers中共享變量
- 27. 在同一進程中加載多個共享庫
- 28. 在MATLAB中的兩個函數之間共享一個變量?
- 29. 共享變量的多個ScriptControl實例
- 30. C++在多個進程之間共享單個類對象
感謝您指點我的文檔。我已經使用Manager對象在進程之間共享數據。謝謝 – bawejakunal