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))

 

原文地址:http://www.cnblogs.com/niunai/p/16885790.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性