我已经构建了一个非常简单的程序来理解并行化可能有何帮助(节省时间)。 这个程序只是在文件中写一个整数列表,然后按整数范围分割处理。 阅读相关问题,我已经把Lock,但没有改进。 该程序运行,但不是在我的文件中,例如,1000000行,我将有99996xx ...并且工人的数量不会改变任何东西(即使有一个工人,问题仍然很奇怪......但是没有竞争工人之间的问题)。
可能有人解释我有什么问题吗? (我尝试在worker中打开并编写一个文件,然后连接所有文件:它运行。但是我想知道为什么我不能在多处理的共享文件中写入)。请在下面找到代码:
import csv
import time
import multiprocessing
SizeOfSet=8000000
PathCorpus='/home'
Myfile='output.csv'
MyFile=PathCorpus+'/'+Myfile
step=1000000
nb_worker=SizeOfSet//step
def worker_verrou(verrou,start,end):
verrou.acquire()
for k in range(start,end):
try:
writerfile.writerow([k])
except:
print('pb with writerow %i',k)
verrou.release()
return
pointeurwritefile = open(MyFile, "wt")
writerfile = csv.writer(pointeurwritefile)
verrou=multiprocessing.Lock()
start_time = time.time()
jobs=[]
for k in range(nb_worker):
print('Starting process number %i', k)
p = multiprocessing.Process(target=worker_verrou, args=(verrou, k*step,(k+1)*step))
jobs.append(p)
p.start()
for j in jobs:
j.join()
print '%s.exitcode = %s' % (j.name, j.exitcode)
interval = time.time() - start_time
print('Total time in seconds:', interval)
print('ended')