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