gpt4 book ai didi

Python 多处理 - 对象没有属性

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:33 26 4
gpt4 key购买 nike

我正在尝试在我的脚本上使用多重处理。但这不起作用。我究竟做错了什么?我搜索了太多,但没有找到解决方案。你们能帮我吗?

似乎HistogramMerger正在使用多处理。当我运行脚本时,我看到了一些打印输出,但我没有得到任何通常通过 for 循环得到的结果文件。

我收到此错误消息:

AttributeError: 'module' object has no attribute 'histogramAdd'

ps:此直方图合并脚本将多个文件合并为一个文件。而且,我正在尝试比正常情况更快地运行该脚本。如果您知道更好的解决方案,请告诉我。

没有多重处理(工作)

from histogram_merger import HistogramMerger

var1=697
var2=722
with HistogramMerger("results/resMergedHistograms_"+str(var1)+"_"+str(var1)+".root") as hm:
for i in xrange(var1,var2+1):
print "Run Number : " +str(i)
hm.addHistogramFile("../results/run"+str(i)+"/run"+str(i)+"_histo.root")

使用多重处理

from histogram_merger import HistogramMerger
from multiprocessing import Pool

var1=697
var2=722

##################################################

arrayOfNumbers = [xx for xx in range(var1, var2+1)]
print(arrayOfNumbers)
pool = Pool(8)

def histogramAdd(run):
print("Run Number : "+str(run))
hm.addHistogramFile("../results/run"+str(run)+"/run"+str(run)+"_histo.root")

if __name__ == '__main__':
with HistogramMerger("results/resMergedHistograms_"+str(var1)+"_"+str(var2)+".root") as hm:
pool.map(histogramAdd, arrayOfNumbers)
pool.join()

最佳答案

错误消息很奇怪。 hm 不在函数 histogramAdd 的范围内。我希望出现类似 NameError: name 'hm' is not Defined 的内容。也许有一些 hm 导入您没有显示。

无论如何,您需要将对象传递给函数。您可以使用functools.partial为了这。例如

from functools import partial

# ...

def histogramAdd(run, hm): # <- extra parameter!
print("Run Number : "+str(run))
hm.addHistogramFile("../results/run"+str(run)+"/run"+str(run)+"_histo.root")

if __name__ == '__main__':
with HistogramMerger("results/resMergedHistograms_"+str(var1)+"_"+str(var2)+".root") as hm:
pool.map(partial(histogramAdd, hm), arrayOfNumbers)
pool.join()

关于Python 多处理 - 对象没有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com