multiprocessing

2020-03-27  本文已影响0人  EricLee_1900

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 方法名称

上一篇下一篇

猜你喜欢

热点阅读