进程池:
每一个进程在启动一个子进程时都会克隆一分数据,并开启额外一份内存空间,如果多次开启子进程,对内存的开销比较大,这里可以通过进程池来控制进程的最大个数,来解决。
进程池中有两个方法:
- apply #串行
- apply_async #并行
回调callback:
可以启动10台机器批量进行数据库备份,每个进程执行完毕后在数据库内写入一条日志,可以使用回调写入,回调是由主进程执行的,所以只进行一次链接就可以并发帮子进程写入日志,而不需要进行重复的链接。
# windows下的多进程参数
# from multiprocessing import freeze_support
from multiprocessing import Pool
import time,os
def Foo(i):
time.sleep(2)
print("in process",os.getpid())
return i+100
def Bar(arg):
print('-->exec done:',arg,os.getpid())
# 判断是直接执行这个脚本,就成立
# 如果是其他文件调用这个脚本就不执行
if __name__ == '__main__':
# 允许进程池同时放入吴哥进程
# cpu只会计算这5个,其他进程处于挂起状态
pool = Pool(processes=5)
for i in range(10):
# 并行执行程序
# callback=回调 执行玩func在回掉callback
# 主进程进行回调
pool.apply_async(func=Foo, args=(i,),callback=Bar)
# 串行执行进程
#pool.apply(func=Foo, args=(i,))
print('end')
# 关闭pool
pool.close()
# 注:并行执行时,先close在join。
# 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。
pool.join()
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。