concurent.furtrue实现进程池与线程池

一、concurent.furtrue模块

1 # 导入进程池类
2 from concurrent.futures import ProcessPoolExecutor
3 
4 # 导入线程池类
5 from concurrent.futures import ThreadPoolExecutor

二、框架结构

三、示例代码:

 1 # 进程池
 2 from concurrent.futures import ProcessPoolExecutor
 3 import os
 4 import time,random
 5 
 6 def task(n):  # 定义要做的事情
 7     print('%s is running '%os.getpid())
 8     time.sleep(random.randint(1,3))
 9     return n**2
10 
11 if __name__ == '__main__':
12     p = ProcessPoolExecutor(max_workers=4)  # 创建一个进程池,max_workers可不写。
13     l = []
14     for i in range(10):
15         obj = p.submit(task,i)  # 想进程池提交10个任务,task的参数是i
16         l.append(obj)
17     p.shutdown()     # 等到进程池中的任务都运行完毕。相当于之前的p.close()+p.join()
18     print('=='*30)
19     print([obj.result() for obj in l ])
 1 # 线程池
 2 from concurrent.futures import ThreadPoolExecutor
 3 import os
 4 import time,random
 5 
 6 def task(n):
 7     print('%s is running '%os.getpid())
 8     time.sleep(random.randint(1,3))
 9     return n**2
10 
11 if __name__ == '__main__':
12     start = time.time()
13     p = ThreadPoolExecutor(max_workers=20)  # 不写的话,默认是当前机器CPU个数的5倍,
14     l = []
15     for i in range(100):
16         obj = p.submit(task,i)
17         l.append(obj)
18     p.shutdown()
19     print('=='*30)
20     print([obj.result() for obj in l ])
21     print(time.time()-start)

p.map()方法的用法

 1 from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
 2 import os,time,random
 3 def task(n):
 4     print('%s is running' %os.getpid())
 5     time.sleep(2)
 6     return n**2
 7 
 8 
 9 if __name__ == '__main__':
10     p=ProcessPoolExecutor()
11     obj=p.map(task,range(10))  # 提交任务
12     p.shutdown()
13     print('='*30)
14     print(list(obj))
原文地址:https://www.cnblogs.com/fengqing89/p/7458855.html