【发布时间】:2013-07-25 11:37:30
【问题描述】:
我有 8 个 CPU 内核和 200 个任务要完成。每个任务都是隔离的。无需等待或分享结果。我正在寻找一种方法来一次运行 8 个任务/进程(最大)并且其中一个完成。剩下的任务会自动启动进程。
如何知道子进程何时完成并启动新的子进程。首先,我尝试使用进程(多处理),但很难弄清楚。然后我尝试使用池并面对泡菜问题,因为我需要使用动态实例化。
已编辑:添加我的池代码
class Collectorparallel():
def fire(self,obj):
collectorController = Collectorcontroller()
collectorController.crawlTask(obj)
def start(self):
log_to_stderr(logging.DEBUG)
pluginObjectList = []
for pluginName in self.settingModel.getAllCollectorName():
name = pluginName.capitalize()
#Get plugin class and instanitiate object
module = __import__('plugins.'+pluginName,fromlist=[name])
pluginClass = getattr(module,name)
pluginObject = pluginClass()
pluginObjectList.append(pluginObject)
pool = Pool(8)
jobs = pool.map(self.fire,pluginObjectList)
pool.close()
print pluginObjectList
pluginObjectList 有类似
[<plugins.name1.Name1 instance at 0x1f54290>, <plugins.name2.Name2 instance at 0x1f54f38>]
PicklingError: Can't pickle : 属性查找 builtin.instancemethod 失败
但进程版本工作正常
【问题讨论】:
-
解决方法是使用
multiprocessing.Pool。如何解决window的pickling问题完全就看代码了。 发布一些代码!如果您可以编写一个 small 和 self-contained 示例,我们可以将其用于测试并清楚地显示您的用例。 -
@Bakuriu 我已经添加了我的代码