from concurrent.futures import ThreadPoolExecutor,as_completed,wait
import time
# 线程池
# 主线程中可以获取某一个线程的状态或某一个任务的状态 以及返回值
# 当一个线程完成的时候我们主线程能立即知道
# futures 可以让多线程和多进程编码接口一致
# 定义一个模拟网络请求
def get_html(times):
time.sleep(times)
print("get page {} success".format(times))
return times
# 定义一个线程池
executor = ThreadPoolExecutor(max_workers=2)
# # 提交任务,把执行的函数提交到线程池中,是立即返回 非阻塞
# task1 = executor.submit(get_html,(3))
# task2 = executor.submit(get_html,(2))
#
# # done方法用于判定某个任务是否完成
# print(task1.done())
# print(task2.cancel()) # 取消某一个任务 返回True 或False,若任务状态在执行中或完成是取消不了的,只要在还没开始执行可以取消
# time.sleep(3)
# print(task1.done())
#
# # result 获取task返回结果 是阻塞的
# print(task1.result())
# -----------------------
# 要获取已经成功的task的返回
# 批量提交任务
urls = [3,2,4]
all_task = [executor.submit(get_html,(url)) for url in urls]
# 用于阻塞主线程, 等子线程执行完 在执行主线程,也可以设置条件,等某子线程执行完 返回主线程
wait(all_task)
print("主线程")
# # 示例一
# for future in as_completed(all_task):
# data = future.result()
# print("get {} page success".format(data))
#
# 示例2 map 返回顺序和url顺序是一致的
# for data in executor.map(get_html,urls):
# print("get {} page ".format(data))
标签:task,get,futures,concurrent,html,线程,executor,print From: https://www.cnblogs.com/niunai/p/16885790.html