簡體   English   中英

工人池,其中某些任務只能由某些工人完成

[英]Worker pool where certain tasks can only be done by certain workers

我有很多任務想一次執行。 正常的解決方案是線程池。 但是,我的任務需要只有某些線程才能擁有的資源。 因此,我不能只是將任務分配到任何舊線程上。 線程必須具有任務所需的資源。

似乎應該為此使用並發模式,但是我似乎找不到它。 我正在用多處理功能在Python 2中實現此功能,因此用這些術語回答會很好,但是通用的解決方案很好。 就我而言,“線程”實際上是獨立的OS進程,資源是網絡連接(不,它不是服務器,因此(e)輪詢/選擇無濟於事)。 通常,線程/進程可以容納多個資源。

這是一個幼稚的解決方案:將任務放在工作隊列中,然后在其上釋放線程池。 讓每個線程檢查“我可以執行此任務嗎?” 如果是,請執行; 如果否,則將其放回隊列。 但是,如果每個任務只能由N個線程之一完成,那么我要做的是〜2N昂貴,浪費的訪問共享隊列的工作,只是為了獲得一個工作單元。

這是我當前的想法:為每個資源共享一個工作隊列。 將任務播種到匹配的隊列中。 每個線程檢查它可以處理的隊列。

有想法嗎?

一種常見的方法是不將資源分配給線程,也不將適當的資源與數據放入隊列,盡管我知道,如果將資源綁定到特定線程,則並非總是可能的。

在線程中對每個資源使用隊列的想法只能從包含它可以處理的對象的隊列中彈出對象。

可以使用按資源索引的semaphore + concurrentQueue數組來發信號通知此類線程,並提供優先級系統,因此消除了大多數輪詢和浪費的重新排隊。 我將對此進行更多考慮-它取決於資源如何映射到線程。

暫無
暫無

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

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