具有无法序列化参数的多处理池

时间:2017-05-22 21:05:14

标签: python multiprocessing pickle pool

多处理的池函数选择传递给它的所有参数,然后在池中重新创建它们。

在我的例子中,我有一些不能被捕捉的参数(它们是c ++对象),并且它们需要花费大量时间来创建。

有没有办法可以将这些参数传递到池中而不必将它们序列化?

1 个答案:

答案 0 :(得分:0)

multiprocessing.Pool允许传递初始化函数,该函数在每次生成新的工作进程时执行。

您可以使用此函数初始化C ++对象。每个流程都有自己的副本。

from multiprocessing import Pool

parameters = None

def initializer():
    global parameters

    parameters = initialize_cpluplus_objects()

def function():
    parameters.do_something()


pool = Pool(initializer=initializer_function)
pool.apply_async(function)