簡體   English   中英

Python多重處理-對象沒有屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM