首页 > 编程语言 > 详细

【10.7】ThreadPoolExecutor线程池

时间:2019-08-05 21:45:12      阅读:140      评论:0      收藏:0      [点我收藏+]
 1 #!/user/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 from concurrent.futures import ThreadPoolExecutor
 5 import time
 6 
 7 # 线程池
 8 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
 9 # 当一个线程完成的时候,我们主线程能立即知道
10 # futures可以让多线程和多进程编码接口一致
11 
12 
13 def get_html(times):
14     time.sleep(times)
15     print(get page {} success.format(times))
16     return times
17 
18 
19 executor = ThreadPoolExecutor(max_workers=1)
20 # 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
21 # submit(fn, *args, **kwargs)
22 task1 = executor.submit(get_html, (3))
23 task2 = executor.submit(get_html, (2))
24 
25 # done方法用判断某个任务是否完成
26 print(task1.done())
27 # cancel不能取消任务状态为执行中或者执行完成的task
28 print(task2.cancel())
29 time.sleep(3)
30 print(task1.done())
31 
32 # result方法可以获取task的执行结果
33 print(task1.result())
False
True
get page 3 success
True
3

 

as_completed

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 from concurrent.futures import ThreadPoolExecutor, as_completed
 5 import time
 6 from collections.abc import Iterable
 7 
 8 
 9 # 线程池
10 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
11 # 当一个线程完成的时候,我们主线程能立即知道
12 # futures可以让多线程和多进程编码接口一致
13 
14 
15 def get_html(times):
16     time.sleep(times)
17     print(get page {} success.format(times))
18     return times
19 
20 
21 executor = ThreadPoolExecutor(max_workers=2)
22 # 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
23 # submit(fn, *args, **kwargs)
24 # task1 = executor.submit(get_html, (3))
25 # task2 = executor.submit(get_html, (2))
26 
27 # 获取已经成功的task的返回
28 # 批量提交,利用列表推导式
29 urls = [3, 2, 4]
30 all_task = [executor.submit(get_html, (url)) for url in urls]
31 
32 for future in as_completed(all_task):
33     data = future.result()
34     print(get {} page.format(data))
get page 2 success
get 2 page
get page 3 success
get 3 page
get page 4 success
get 4 page

 

map

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 from concurrent.futures import ThreadPoolExecutor, as_completed
 5 import time
 6 from collections.abc import Iterable
 7 
 8 
 9 # 线程池
10 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
11 # 当一个线程完成的时候,我们主线程能立即知道
12 # futures可以让多线程和多进程编码接口一致
13 
14 
15 def get_html(times):
16     time.sleep(times)
17     print(get page {} success.format(times))
18     return times
19 
20 
21 executor = ThreadPoolExecutor(max_workers=2)
22 urls = [3, 2, 4]
23 
24 # 通过executor获取已经完成的task,executor.map返回的是future.result()
25 # map的返回顺序是和urls一样的
26 for data in executor.map(get_html, urls):
27     print(get {} page.format(data))
get page 2 success
get page 3 success
get 3 page
get 2 page
get page 4 success
get 4 page

 

wait

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 from concurrent.futures import ThreadPoolExecutor, wait
 5 import time
 6 from collections.abc import Iterable
 7 
 8 
 9 # 线程池
10 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
11 # 当一个线程完成的时候,我们主线程能立即知道
12 # futures可以让多线程和多进程编码接口一致
13 
14 
15 def get_html(times):
16     time.sleep(times)
17     print(get page {} success.format(times))
18     return times
19 
20 
21 executor = ThreadPoolExecutor(max_workers=2)
22 # 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
23 # submit(fn, *args, **kwargs)
24 # task1 = executor.submit(get_html, (3))
25 # task2 = executor.submit(get_html, (2))
26 
27 # 获取已经成功的task的返回
28 # 批量提交,利用列表推导式
29 urls = [3, 2, 4]
30 all_task = [executor.submit(get_html, (url)) for url in urls]
31 
32 # 等待某一或一组任务的完成,阻塞主线程
33 wait(all_task)
34 print(ok)
get page 2 success
get page 3 success
get page 4 success
ok

 

【10.7】ThreadPoolExecutor线程池

原文:https://www.cnblogs.com/zydeboke/p/11305094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!