我有一个非常大的树(大约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
,则会得到以下错误:
我希望有人能给我正确的方向
注:我刚开始使用多处理,所以请在解释相关内容时更具体一点东西。谢谢在
目前没有回答
相关问题 更多 >
编程相关推荐