簡體   English   中英

在並發的python進程/執行程序之間共享資源?

[英]Share resources between concurrent python processes / executors?

我有一個簡單的程序來處理從文件中讀取的內容。 有很多事情,處理不是很快,並且需要龐大的數據結構來查找和計算,因此運行此過程會花費很多時間。 這應該是平行的,但是我不確定如何最好地在Python中做到這一點(使用Pythong 3.5或更高版本)。

我想學習如何最好地走向並行實現。 理想情況下,我將有許多工作人員,他們共享巨大的數據結構,然后讀取事物並將它們循環分配給隊列中的每個工作人員。 工人將使用(共享的)巨大的數據結構進行緩慢的處理,並且每個人都以某種方式存儲結果。 一旦所有工作人員都完成了工作,我將收集每組結果並按順序合並它們。

在Python中是否可能出現這種情況,或者在Python中做到這一點的最佳方法是什么? 我已經嘗試過了,但是對理解current.futures模塊的理解不夠,以至於我無法用它來實現解決方案。

我感到困惑的是,目前尚不清楚“幕后”會發生什么。 如果為每件事運行的可調用對象不是純粹的功能,而是需要首先加載(大量)數據,那么如何最好地實現這一點? 我假設我不能簡單地傳遞對數據的引用? 可以嗎 它適用於多線程而不適用於多處理嗎? 但是使用多線程會加快我的問題嗎?

例如,如果您不太在意哪個線程將處理部分數據,則可以在線程之間共享一個Queue ,並在隊列不為空時在每個線程上循環。

class Test(Thread):

    def __init__(self, q, i):
        super().__init__()
        self.q = q
        self.id = i

    def run(self):
        while not self.q.empty():
            print(str(self.q.get()) + 'treated by thread ' + str(self.id))

暫無
暫無

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

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