Вы не можете использовать map()
для этого, потому что он не дает возможности перестать ждать результатов, ни каким-либо способом получить отправленные фьючерсы и отменить их.Однако вы можете сделать это, используя submit()
:
import concurrent.futures
import time
def func(i):
time.sleep(i)
return i*i
list = [1,2,3,6,6,6,90,100]
async_executor = concurrent.futures.ThreadPoolExecutor(2)
futures = {async_executor.submit(func, i): i for i in list}
for ii, future in enumerate(concurrent.futures.as_completed(futures)):
print(ii, "result is", future.result())
if ii == 2:
async_executor.shutdown(wait=False)
for victim in futures:
victim.cancel()
break
Для запуска приведенного выше кода требуется около 11 секунд - он выполняет задания [1,2,3,6,7], но не остальные.