from multiprocessing import Pool
pool = Pool(processes=4,maxtasksperchild=2)
maxtasksperchild本意是每个进程最大的任务量,如果你maxtasksperchild = 2, 那么他每次干完两个任务后,就会spawn一个新的进程。
可以防止某个进程内存泄露被oom,这样可以通过原始kill进程的方式回收内存资源。
pool = Pool(2)
param_args = (args1,)
pool.apply_async(print_word, param_args)
pool.close() # 关闭进程池,表示不能在往进程池中添加进程
pool.join() # 等待进程池中的所有进程执行完毕,必须在close之后调用
当使用多进程时
传入参数如果是一个功能方法函数,直接传入函数名即可,'传入方法函数'所需要的参数也写入参数元组中;
示例1
from multiprocessing import Pool
pool = Pool(2)
param_args = (args1,) # 传入普通参数,常量/变量参数
pool.async(print, param_args)
pool.close()
pool.join()
示例2
def print(s1, f1, s2):
print ('print s1', s1)
f1(s2)
def f1(s2):
print ('print s2', s2)
pool = Pool(3)
param_args = ('hello', f1, 'world') # 传入方法
pool.async(print, param_args)
pool.close()
pool.join()
普通引用方法可以作为参数传入,在外部初始化一次
但是创建mongo 连接,需要一个进程创建一个链接,去方法内部创建,传入数据库配置、MongoDBer 方法名称
网友评论