python 線程池 futures.ThreadPoolExecutor


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM