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