[英]'NoneType' object has no attribute '_registry' - Python multiprocessing
[英]Python Multiprocessing - Object has no attribute
我正在嘗試在腳本上使用多重處理。 但這是行不通的。 我究竟做錯了什么? 我搜索了太多,但是沒有找到解決方案。 你能幫我嗎?
似乎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
東西NameError: name 'hm' is not defined
。 也許您沒有顯示hm
import。
無論如何,您都需要將對象傳遞給函數。 您可以為此使用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.