传球<根.TFile>对象到不同的工人使用多处理modu

2024-09-27 21:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的树(大约1M),我需要随机访问它的一些元素,并使用一些标准检索数据。问题是当我想在我的计算机核心之间并行这个任务时。经过一些调试后,我意识到问题是传递file对象(f=根.TFile("合并树.root)以在每个进程中运行。我的每个核心都应该运行以下代码:

def worker(tree,f,func,table,features,indexes):
    print "starting:" , mp.current_process().name
    time.sleep(2)

    print tree.GetEntry(100) # *****returns -1,means I/O error************* 

    x=[]
    y=[]
    appendx=x.append
    appendy=y.append
    for ind in indexes[0]:
       # print type(ind)
       # print tree.GetEntry(100)
        tree.GetEntry(ind) #access event number "ind"
        appendx(func(tree,features)) #get data samples
        appendy(table[ind]) #store lable of current event

    return x,y

我这样称呼我的函数:

^{pr2}$

你对解决这个问题有什么建议吗?一个简单的方法是将我的根文件的几个副本和每个进程打开特定的文件。但是我不喜欢这个解决方案,而且看起来很傻。在

例如,如果我在函数中尝试print f,则会得到以下错误:

^{3}$

我希望有人能给我正确的方向

注:我刚开始使用多处理,所以请在解释相关内容时更具体一点东西。谢谢在


Tags: eventtree核心进程tablecurrentfuncfeatures

热门问题