簡體   English   中英

如何使用多處理處理帶有 break 語句的 Python for 循環?

[英]How to use multiprocessing for a Python for loop with a break statement?

如何並行化具有 if 條件的 for 循環。 如果滿足該條件,則無需繼續循環。 如果我可以為此使用多處理,那就太好了。

for i in xrange(N):
    x = do_something_with()
    if x == 0:
        break

上面的代碼可以在Python中並行化嗎?

您可以在作業處於活動狀態時終止multiprocessing.Pool ,它將終止子進程。 如果你可以提前生成你的參數, imap_unordered可以用來拉入結果並在滿足條件時終止池。 處理池中其他作業的子進程將被終止,因此它們不會返回其他結果。

import multiprocessing as mp
import time

def worker(x):
    print('work item', x)
    time.sleep(x)
    result = x - 5
    if result == 0:
        print('termination condition')
    print('work item', x, 'done')
    return result

if __name__ == '__main__':
    p = mp.Pool(4)
    for result in p.imap_unordered(worker, range(20), chunksize=1):
        if result == 0:
            print('terminating')
            p.terminate()
            break
    print('done')

結果是

work item 0
work item 1
work item 0 done
work item 4
work item 3
work item 2
work item 1 done
work item 5
work item 2 done
work item 6
work item 3 done
work item 7
work item 4 done
work item 8
termination condition
work item 5 done
work item 9
terminating
done

請注意,有些作業已啟動但尚未完成。

暫無
暫無

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

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