博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
concurrent.futures模块
阅读量:6485 次
发布时间:2019-06-23

本文共 2435 字,大约阅读时间需要 8 分钟。

1.concurrent.futures模块介绍

2.ThreadPoolExecutor线程池使用

3.ProcessPoolExecutor进程池使用

4.其他方法使用

 

 

1.concurrent.futures模块介绍

1 # 介绍 2     concurrent.futures模块提供了高度封装的异步调用接口 3     ThreadPoolExecutor:线程池,提供异步调用 4     ProcessPoolExecutor: 进程池,提供异步调用 5  6 # 基本方法 7 # submit(fn, *args, **kwargs)  异步提交任务 8  9 # map(func, *iterables, timeout=None, chunksize=1)  取代for循环submit的操作10 11 # shutdown(wait=True) 相当于进程池的pool.close()+pool.join()操作12     wait=True,等待池内所有任务执行完毕回收完资源后才继续13     wait=False,立即返回,并不会等待池内的任务执行完毕14     但不管wait参数为何值,整个程序都会等到所有任务执行完毕15     submit和map必须在shutdown之前16 17 # result(timeout=None) 取得结果18 19 # add_done_callback(fn) 回调函数

 

 

2.ThreadPoolExecutor线程池使用

1 from concurrent.futures import ThreadPoolExecutor 2 import time 3 import random 4  5 def task(n): 6     print(n) 7     time.sleep(random.randint(1, 3)) 8     return n ** 2 9 10 if __name__ == '__main__':11     executor = ThreadPoolExecutor(max_workers=5)       # 最多5个线程12     futures = []13     for i in range(11):14         future = executor.submit(task, i)15         futures.append(future)16     executor.shutdown(True)17     print('+++>')18     for future in futures:19         print(future.result())

 

 

3.ProcessPoolExecutor进程池使用

1 from concurrent.futures import ProcessPoolExecutor 2 import os 3 import time 4 import random 5  6 def task(n): 7     print('%s is runing' % os.getpid()) 8     time.sleep(random.randint(1, 3)) 9     return n ** 210 11 if __name__ == '__main__':12     executor = ProcessPoolExecutor(max_workers=3)       # 最多3个进程13     futures = []14     for i in range(11):15         future = executor.submit(task, i)16         futures.append(future)17     executor.shutdown(True)18     print('+++>')19     for future in futures:20         print(future.result())

 

 

4.其他方法使用

1 # map方法使用 2 import time 3 from concurrent.futures import ThreadPoolExecutor 4  5 def func(n): 6     time.sleep(2) 7     print(n) 8     return n * n 9 10 def call_back(m):11     print('结果是 %s' % m.result())12 13 tpool = ThreadPoolExecutor(max_workers=5) 14 tpool.map(func, range(20))  # 注意map方法拿不到返回值
1 # 回调函数 2 import time 3 from concurrent.futures import ThreadPoolExecutor 4  5 def func(n): 6     time.sleep(2) 7     print(n) 8     return n * n 9 10 # 回调函数11 def call_back(m):12     print('结果是 %s' % m.result())13 14 tpool = ThreadPoolExecutor(max_workers=5)15 for i in range(20):16     tpool.submit(func, i).add_done_callback(call_back)

 

转载于:https://www.cnblogs.com/wyb666/p/9772868.html

你可能感兴趣的文章
CoreText进阶(五)- 文字排版样式和效果
查看>>
java中的访问权限
查看>>
CallableAndFuture
查看>>
Nginx配置文件详细说明
查看>>
Java程序打包成jar包
查看>>
如何验证DB2数据库备份是否成功
查看>>
mysql主从复制
查看>>
构建高性能web站点-1
查看>>
【No.7 C++对象的构造与析构时间】
查看>>
kickstart相关搭建配置
查看>>
记录:C#编程打印菱形图案
查看>>
设计模式系列二 观察者模式介绍
查看>>
eclipse的工作区间默认之后,闪退的解决方案
查看>>
乔客JS友情链接改文本输出
查看>>
从源码角度理解Java设计模式——门面模式
查看>>
iOS中Cookie介绍(转)
查看>>
linux服务
查看>>
我的友情链接
查看>>
java程序题:打印出杨辉三角形
查看>>
DBA人员面试易忽略的细节
查看>>