[英]How to limit the workers' throughput in imap_unrdered?
我正在使用來自多處理庫的imap_unordered
來並行化一些數據處理計算。 問題在於,有時讀取返回的迭代器進程的主進程會比工作人員生成的結果慢(網絡/磁盤速度限制等)。 這導致程序消耗所有可用內存並崩潰。
我希望內部迭代器有一些內部大小限制,以便當返回的迭代器處理得太慢時,內部隊列將滿並阻塞生產者(異步工作程序)。 但是顯然不是這樣。
實現這種行為的最簡單方法是什么?
您可能要考慮使用Queue
:
import multiprocessing # Don't use queue.Queue!
MAX_QUEUE_SIZE = 20
q = multiprocessing.Queue(MAX_QUEUE_SIZE) # Inserts will block if the queue is full
然后,在您的主過程中:
while 1:
do_something_with(q.get())
在您的子進程中:
while 1:
q.put(create_something())
您將不得不重寫一些機制(即,您不再能夠使用imap_unordered
),但是使用Pool
的較低級別的方法應該是相當瑣碎的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.