wait方法接會返回一個tuple(元組),tuple中包含兩個set(集合),一個是completed(已完成的)另外一個是uncompleted(未完成的)。使用wait方法的一個優(yōu)勢就是獲得更大的自由度,它接收三個參數(shù)FIRST_COMPLETED, FIRST_EXCEPTION 和ALL_COMPLETE,默認(rèn)設(shè)置為ALL_COMPLETED。
我們通過下面這個例子來看一下三個參數(shù)的區(qū)別
from concurrent.futures import ThreadPoolExecutor, wait, as_completedfrom time import sleepfrom random import randintdef return_after_random_secs(num): sleep(randint(1, 5)) return "Return of {}".format(num)pool = ThreadPoolExecutor(5)futures = []for x in range(5): futures.append(pool.submit(return_after_random_secs, x))print(wait(futures))# print(wait(futures, timeout=None, return_when='FIRST_COMPLETED'))
如果采用默認(rèn)的ALL_COMPLETED,程序會阻塞直到線程池里面的所有任務(wù)都完成。
ziwenxie :: ~ » python example5.pyDoneAndNotDoneFutures(done={<Future at 0x7f0b06c9bc88 state=finished returned str>,<Future at 0x7f0b06cbaa90 state=finished returned str>,<Future at 0x7f0b06373898 state=finished returned str>,<Future