好吧,所以我从来没有使用过python多处理库,我也不知道如何使用我的搜索。我阅读了图书馆的文档,我试图寻找我的问题的例子,但什么也找不到。
我有一个文件名列表(~2400)、一个字典(称为cond,是全局的)和一个函数。我想在每个处理器上运行我的函数,每次函数运行时它都使用其中一个文件名作为变量。因此,我希望它运行4个进程,每个处理器1个,它应该在列表中按自己的方式运行,当一个函数结束时,它将进入列表中的下一项,并且这些函数中的每一个都将更新一个共享字典。你知道吗
PSUDO功能代码:
def PSC(fnom):
f = open(fnom,"r")
r = xml.dom.minidom.parse(f)
cond[fnom] = otherfunc(r)
f.close()
那么,a)是否可以对这个函数使用多处理,b)如果可以,多处理库中的哪个方法可以处理它,c)如果您非常友好,我如何遍历一个列表,每次都将每个项作为arg传递。你知道吗
思考它的工作方式(psudo bulls***代码):
if __name__ == __main__:
name_list = name_list_func()
method = multiprocessing.[method]() #no idea what method
method.something(target=PSC, iter=name_list) #no idea either
这很简单,除了“单一共享字典”部分。进程不共享内存。这是个谎言,但这是你首先应该相信的;—)我将把dict保存在主程序中,因为这比任何实际的跨进程共享dict的方法都要有效:
这就是你可以实际运行的代码。插入文件打开错误、XML解析等,不会改变使多处理部分正常工作所需的任何内容。你知道吗
在当前的python3中,这可以变得简单一点。这里的代码是针对python2的。你知道吗
请注意,除了
imap_unordered()
,还可以使用imap()
或map()
。imap_unordered()
为实现提供了尽可能高效地安排事情的最大自由度,尽管到目前为止,实现还没有足够的智能来充分利用这一点。展望未来;—)相关问题 更多 >
编程相关推荐