Python 笔记之进程池Pool
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程 但是如果是上百个或者上千个目标,手动去创建进程的工作量很大,此时就可以利用到Multiprocessing模块提供的Pool方法 初始化pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满 那么就会创建一个新的进程来执行该请求;但是如果池中的进程数量已经达到指定的最大值,那么该请求会等待 直到池中有进程结束,才会创建新的进程来执行 阻塞式: 非阻塞式:全部添加到队列中,立刻返回,并没有等待其它进程执行完毕,但是回调函数是等地啊任务完成之后才调用。 好处:设置进程数量,达到进程的复用
import os
from multiprocessing import Pool
#非阻塞式进程
import time
from random import random
def task(task_name):
print('开始做任务',task_name)
start=time.time()
#使用sleep
time.sleep(random()*2)
end=time.time()
# print(f'{task_name}完成任务用时:',(end-start),'进程id:',os.getpid())
return(f'{task_name}完成任务用时:',(end-start),'进程id:',os.getpid())
container=[]
def callback_func(n):
# print(n)
container.append(n)
if __name__ == '__main__':
pool1=Pool(5)
tasks=['听音乐','洗衣服','散步','看孩子','做饭','吃饭','洗碗','拖地']
for i in range(8):
pool1.apply_async(task,args=(tasks[i],),callback=callback_func)#async 非阻塞
pool1.close()#添加任务结束
pool1.join()#堵住主进程,插队
for i in container:
print(i)
print('over!!')
阻塞式:添加一个任务执行一个任务,如果一个任务不结束,宁一个就进不来
if __name__ == '__main__':
pool1=Pool(5)
tasks=['听音乐','洗衣服','散步','看孩子','做饭','吃饭','洗碗','拖地']
for i in range(8):
pool1.apply(task,args=(tasks[i],))#async 非阻塞
pool1.close()#添加任务结束
pool1.join()#堵住主进程,插队
for i in container:
print(i)
print('over!!')
原文地址:https://blog.csdn.net/Katherine1029/article/details/143926397
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!