| 站长开始收学徒,辅导python啦! | 站长答疑 | 本站每日ip已超7000,现出租广告位,位置价格可谈,需要合作请联系站长
+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-04(1)

2019-06(2)

2019-07(2)

2019-08(87)

2019-09(90)

2019-10(11)

2019-11(4)

2019-12(17)

2020-01(27)

2020-02(30)

2020-03(83)

Python 高级编程和异步IO并发编程 --11_7 ThreadPoolExecutor线程池

发布于2020-03-26 11:03     阅读(531)     评论(0)     点赞(22)     收藏(0)


  1. from concurrent import futures
  2. from concurrent.futures import ThreadPoolExecutor
  3. '''
  4. 线程池,为什么需要线程池?
  5. 1. 主线程中可以获取某一个线程的状态,或者某一个任务的状态,以及返回值。
  6. 2. 当一个线程完成的时候,主线程能立即知道,并获取状态
  7. 3. future可以让多线程和多进程编码,接口一致
  8. '''
  9. import time
  10. def get_html(times):
  11. time.sleep(times)
  12. print("get page {} success".format(times))
  13. return times
  14. executor = ThreadPoolExecutor(max_workers=2)
  15. # 通过submit函数提交执行的函数到线程池中,Submit非阻塞,立即返回
  16. task1 = executor.submit(get_html,(3)) # 传递的是函数名称,而不能是函数的调用get_html()
  17. task2 = executor.submit(get_html,(2))
  18. print(task1.done()) # done方法用于判断任务有没有执行成功
  19. print(task2.cancel()) # cancel 只能在submit返回的对象上操作,不可在executer上面操作。是future类的方法。
  20. # cancel方法在执行中,是无法取消的,只有在为开始执行时才可以取消。
  21. # executor = ThreadPoolExecutor(max_workers=2) 定义了同时有两个线程执行,因此task1/task2 已提交就立即执行,因此此处无法取消。
  22. time.sleep(4)
  23. print(task1.done())
  24. print(task1.result()) # result方法返回task的执行结果
  1. False
  2. False
  3. get page 2 success
  4. get page 3 success
  5. True
  6. 3
  1. from concurrent import futures
  2. from concurrent.futures import ThreadPoolExecutor
  3. '''
  4. 线程池,为什么需要线程池?
  5. 1. 主线程中可以获取某一个线程的状态,或者某一个任务的状态,以及返回值。
  6. 2. 当一个线程完成的时候,主线程能立即知道,并获取状态
  7. 3. future可以让多线程和多进程编码,接口一致
  8. '''
  9. import time
  10. def get_html(times):
  11. time.sleep(times)
  12. print("get page {} success".format(times))
  13. return times
  14. executor = ThreadPoolExecutor(max_workers=1)
  15. # 通过submit函数提交执行的函数到线程池中,Submit非阻塞,立即返回
  16. task1 = executor.submit(get_html,(3)) # 传递的是函数名称,而不能是函数的调用get_html()
  17. task2 = executor.submit(get_html,(2))
  18. print(task1.done()) # done方法用于判断任务有没有执行成功
  19. print(task2.cancel())
  20. '''
  21. # cancel 只能在submit返回的对象上操作,不可在executer上面操作。是future类的方法。
  22. # cancel方法在执行中,是无法取消的,只有在为开始执行时才可以取消。
  23. # 更新为executor = ThreadPoolExecutor(max_workers=1) 定义了同时有一个线程执行,因此只有task1提交,task2就可以取消。
  24. '''
  25. time.sleep(4)
  26. print(task1.done())
  27. print(task1.result()) # result方法返回task的执行结果
  1. False
  2. True # Task已经成功取消
  3. get page 3 success # 不再打印get page 2 success
  4. True
  5. 3
  1. from concurrent import futures
  2. from concurrent.futures import ThreadPoolExecutor,as_completed
  3. '''
  4. 线程池,为什么需要线程池?
  5. 1. 主线程中可以获取某一个线程的状态,或者某一个任务的状态,以及返回值。
  6. 2. 当一个线程完成的时候,主线程能立即知道,并获取状态
  7. 3. future可以让多线程和多进程编码,接口一致
  8. '''
  9. import time
  10. def get_html(times):
  11. time.sleep(times)
  12. print("get page {} success".format(times))
  13. return times
  14. executor = ThreadPoolExecutor(max_workers=2)
  15. # 获取已经成功的task值,用as_completed 方法,它是一个生成器方法,只会返回已经成功的yield
  16. urls = [3,2,4] # 假设定义三个url,sleep3秒1个,2秒1个,4秒1个。
  17. all_task = [executor.submit(get_html,(url)) for url in urls]
  18. for future in as_completed(all_task):
  19. data = future.result()
  20. print("page {} success".format(data))
  1. get page 2 success
  2. page 2 success
  3. get page 3 success
  4. page 3 success
  5. get page 4 success
  6. page 4 success
  1. from concurrent import futures
  2. from concurrent.futures import ThreadPoolExecutor,as_completed
  3. import time
  4. def get_html(times):
  5. time.sleep(times)
  6. print("get page {} success".format(times))
  7. return times
  8. executor = ThreadPoolExecutor(max_workers=2)
  9. # 获取已经成功的task值,用as_completed 方法,它是一个生成器方法,只会返回已经成功的yield
  10. urls = [3,2,4] # 假设定义三个url,sleep3秒1个,2秒1个,4秒1个。
  11. all_task = [executor.submit(get_html,(url)) for url in urls]
  12. # 通过executor获取已经完成的task
  13. for data in executor.map(get_html,urls):
  14. print("page {} success".format(data))
  1. get page 2 success
  2. get page 3 success
  3. get page 3 success
  4. page 3 success
  5. get page 4 success
  6. get page 2 success
  7. page 2 success
  8. get page 4 success
  9. page 4 success
  1. from concurrent import futures
  2. from concurrent.futures import ThreadPoolExecutor,as_completed,wait
  3. import time
  4. def get_html(times):
  5. time.sleep(times)
  6. print("get page {} success".format(times))
  7. return times
  8. executor = ThreadPoolExecutor(max_workers=2)
  9. # 获取已经成功的task值,用as_completed 方法,它是一个生成器方法,只会返回已经成功的yield
  10. urls = [3,2,4] # 假设定义三个url,sleep3秒1个,2秒1个,4秒1个。
  11. all_task = [executor.submit(get_html,(url)) for url in urls]
  12. wait(all_task) # 等待所有的线程执行完。
  13. print("All Task Completed")
  1. get page 2 success
  2. get page 3 success
  3. get page 4 success
  4. All Task Completed
  1. from concurrent import futures
  2. from concurrent.futures import ThreadPoolExecutor,as_completed,wait,FIRST_COMPLETED
  3. import time
  4. def get_html(times):
  5. time.sleep(times)
  6. print("get page {} success".format(times))
  7. return times
  8. executor = ThreadPoolExecutor(max_workers=2)
  9. # 获取已经成功的task值,用as_completed 方法,它是一个生成器方法,只会返回已经成功的yield
  10. urls = [3,2,4] # 假设定义三个url,sleep3秒1个,2秒1个,4秒1个。
  11. all_task = [executor.submit(get_html,(url)) for url in urls]
  12. wait(all_task,return_when=FIRST_COMPLETED) # 第一个线程执行完就打印
  13. print("All Task Completed")
  1. get page 2 success
  2. All Task Completed
  3. get page 3 success
  4. get page 4 success

 

原文链接:https://blog.csdn.net/f2157120/article/details/105086264



所属网站分类: 技术文章 > python文章

作者:智慧星辰

链接: https://www.pythonheidong.com/blog/article/285045/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

最新文章

  Python-Socketserver实现FTP,文件上传、下载

  Python3标准库:xml.etree.ElementTree XML操纵API

  django时区问题

  Python编程 | 新手必会的 9 个 Python 技巧

  PAT (Basic)1004 成绩排名 (Python实现)

  Python小技巧:用类写装饰器的正确方法,一般新手都不知道

  教你用Python 每日定时推送睡前小故事给你__的人

  后端开发使用pycharm的技巧

  Django 对多对多字段进行批量add

  史上最全的Python面向对象知识点疏理

优质资源排行榜

 python经典电子书大合集下载 下载次数 8148

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7556

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7446

 零基础大数据全套视频400G 下载次数 7009

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6895

 零基础软件测试全套系统教程 下载次数 6507

 这个项目是人人网的爬虫程序 下载次数 6506

 全套人工智能视频+pdf 下载次数 6446

 IOS全套视频教程 基础班+就业班 下载次数 4681

10  python视频各种视频很多 下载次数 3877

11  编程小白的第一本python入门书(高清版)PDF下载 下载次数 3761

12  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3427

13  Python深度学习 pdf下载 下载次数 3196

14  笨办法学python pdf下载 下载次数 3106

15  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 3044

16  树莓派Python编程指南 pdf下载 下载次数 3028

17  python从入门到精通视频(全60集)python视频教程下载 下载次数 3009

18  Python基础教程 pdf下载 下载次数 3002

19  python项目开发视频 下载次数 3002

20  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 3001

21  黑马2017年java就业班全套视频教程 下载次数 2993

22  Python算法教程_中文版 pdf下载 下载次数 2988

23  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

24  利用python实现程序内存监控脚本 下载次数 2987

25  老男孩python自动化视频 下载次数 2983

26  老王python基础+进阶+项目视频教程 下载次数 2975

27  尚硅谷Go学科全套视频 下载次数 2973

28  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2968

29  Web前端实战精品课程 下载次数 2967

30  tron python小游戏 下载次数 2963

31  [小甲鱼]零基础入门学习Python 下载次数 2962

32  老男孩python全栈开发15期 下载次数 2959

33  2017最新web前端开发完整视频教程附源码 下载次数 2948

34  流畅的Python PDF下载高清完整扫描原版 下载次数 2937

35  最新全套完整JAVAWEB2018开发视频 下载次数 2926

36  Python高性能编程 pdf下载 下载次数 2924

37  Spring boot实战视频6套下载 下载次数 2910

38  python全套视频十五期(116G) 下载次数 2910

39  简明python教程 (A Byte of Python)pdf下载 下载次数 2893

40  利用Python进行数据分析 pdf下载 下载次数 2892

41  Python项目实战 下载次数 2888

42  30个小时搞定Python网络爬虫 含源码 下载次数 2887

43  python全自动抢火车票教程-python视频教程下载 下载次数 2883

44  尚硅谷大数据之Hadoop视频 下载次数 2877

45  python接口测试视频 下载次数 2874

46  Python A~B~C~ python视频教程下载 下载次数 2868

47  全套python量化交易视频教程 下载次数 2866

48  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2864

49  web小程序表白天数倒计时源码下载 下载次数 2863

50  python基础视频教程 下载次数 2862