嘿,我有一个工作脚本,但它适用于k组合,所以它工作很长时间...... 我想并行化for循环来划分工作时间。
以下是简化代码:
fin2 = open('combi_nod.txt','r')
for lines in fin2:
(i, j) = eval(lines)
edgefile = open('edge.adjlist', 'a')
count = 0
for element in intersection(
eval(linecache.getline('triangleset.txt', i+1)),
eval(linecache.getline('triangleset.txt', j+1))):
if element not in merge:
count = 1
break
if count == 0:
edgefile.write(' ' + str(j))
edgefile.close()
fin2.close()
我该怎么做?
修改
经过一些修改后,我完成了多处理循环。但他们是一个相关问题:
在我的for
循环中,我在combi_nod.txt
文件中搜索;
combi_nod.txt
内容是大量的itertools.combinaison
。 (所以,在某一点上,我可以将它们存储在变量中)
我的多处理循环使用了这个itertools.combinaison
的列表,因为我还没有看到在参数中传递文件行的方法(所以我有内存问题),你有新想法吗?
EDIT2
为了澄清,这里是代码,就像这一点:
def intersterer(lines):
(i, j) = lines
counttt = 0
for element in some_stuff:
if element not in merge:
counttt = 1
break
if counttt == 0:
return (int(i), int(j))
else:
return (0, 0)
fin2 = open('combi_nod.txt','w')
for trian_c in itertools.combinations(xrange(0, counter_tri), 2):
#counter_tri is a large number
fin2.write(str(trian_c) + "\n")
fin2.close()
fin2 = open('combi_nod.txt','r')
if __name__ == '__main__':
pool = Pool()
listt = pool.map(intersterer, itertools.combinations(xrange(0, counter_tri), 2))
f2(listt)
if (0,0) in listt: listt.remove((0,0))
我希望有类似的工作:
listt = pool.map(intersterer, fin2)
但是我的所有测试根本不起作用...... 帮助...