我想借助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(???)
我给它一个带有插件对象插件的数组,但显然工作人员需要不同的插件。如何用这个实现游泳池?
提前谢谢。
答案 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