簡體   English   中英

如何限制imap_unrdered中工人的吞吐量?

[英]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.

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