如何在multiprocessing.Pool中改变参数

时间:2016-08-18 08:33:37

标签: python python-3.x multiprocessing

我想借助python中的多处理来实现yapsy-plugins。到目前为止,我有一名工人如下:

def mp_worker(plugin, importer, orgadb, regiondb, ispdb):
    print(" Processs " + plugin.plugin_object.getOrigin + " running.")
    processPlugin(plugin, importer, orgadb, regiondb, ispdb)
    print(" Process " + plugin.plugin_object.getOrigin + " done.")

插件参数是一个插件对象。函数processPlugin执行必要的工作但与问题相关。

我处理多处理的处理程序是我卡住的地方:

def mp_handler(plugins, importer, orgadb, regiondb, ispdb):
    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
    pool.map(mp_worker(???)

我给它一个带有插件对象插件的数组,但显然工作人员需要不同的插件。如何用这个实现游泳池?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

经过一段时间的测试后,我发现它是如何工作的,如果它不是一个yapsy插件类:

    def mp_worker(importer, orgadb, regiondb, ispdb, plugin):
        processPlugin(plugin, importer, orgadb, regiondb, ispdb)


    def mp_handler(plugins, importer, orgadb, regiondb, ispdb):
    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
    func = partial(mp_worker, importer, orgadb, regiondb, ispdb)
    pool.map(func, plugins)
    pool.close()

无论如何,pickle不适用于插件类,所以任何想要多处理yapsy插件的人也必须看看这个: http://yapsy.sourceforge.net/MultiprocessPluginProxy.html