from concurrent import futures ##1、主線程中可以獲取某一個線程的狀態或者某一任務的狀態以及返回值 ##2、當一個線程完成的時候主線程能立即知道 ##3、futures可以讓多線程和多進程編碼接口一致 import time def get_html(times): time.sleep(times) print("get page {} success".format(times)) return times executor=futures.ThreadPoolExecutor(max_workers=2) ##submit將任務函數放到線程池中,會立即執行非阻塞 task1=executor.submit(get_html,(3)) task2=executor.submit(get_html,(2)) print(task1.done())##立即執行done()是False print(task2.done())##立即執行done()是False print(task1.result())##result是阻塞的獲取線程結果3 print(task2.result())##2 print(task1.done())##由於result阻塞導致任務完成了 True print(task2.done())##任務完成了True ##要獲取已完成的task的返回 times_list=[3,4,1,2,3,1] # tasks=[ executor.submit(get_html,(a)) for a in times_list] # for future in futures.as_completed(tasks): # result=future.result() # print("%ss task done"%result) ## for result in executor.map(get_html,times_list):##此兩句相當於上面四行代碼 print("%ss task done"%result)