好的,所以我从来没有使用过python多处理库,我真的不知道怎样写我的搜索。我阅读了图书馆的文档,我试图搜索我的问题的例子,我找不到任何东西 我有一个文件名列表(~2400),一个字典(称为cond,是一个全局)和一个函数。我想在每个处理器上运行我的函数,每次函数运行时,它都使用其中一个文件名作为变量。所以我希望它运行4个进程,每个处理器运行1个,并且它应该在列表中工作,当一个函数结束时,它会进入列表中的下一个项目,并且每个函数都将更新一个单一共享字典。
Psudofunction代码:
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 *** code):
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
答案 0 :(得分:0)
除了“单一共享字典”部分外,这很容易。进程不共享内存。这是一个谎言,但这是你应该首先相信的一个;-)我将把这个词汇保留在主要程序中,因为这比任何实际的共享词典的方式更强大远过程:
NUM_CPUS = None # defaults to all available cores
def PSC(fnom):
return fnom, len(fnom)
if __name__ == "__main__":
import multiprocessing as mp
pool = mp.Pool(NUM_CPUS)
list_of_strings = list("abcdefghijklm")
cond = {}
for fnom, result in pool.imap_unordered(PSC, list_of_strings):
cond[fnom] = result
pool.close()
pool.join()
print cond
你可以实际运行的代码。插入文件打开,XML解析等不会改变使多处理部分正常工作所需的任何内容。
在当前的Python 3中,这可以更简单一些。这里的代码适用于Python 2。
请注意,您也可以使用imap_unordered()
或imap()
代替map()
。 imap_unordered()
为实现提供了尽可能有效地安排事物的最大自由,尽管到目前为止,实现并不是非常聪明,无法充分利用它。展望未来; - )