Python多处理使用锁

时间:2018-02-07 14:55:27

标签: python multiprocessing locking

我已经构建了一个非常简单的程序来理解并行化可能有何帮助(节省时间)。 这个程序只是在文件中写一个整数列表,然后按整数范围分割处理。 阅读相关问题,我已经把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')   

0 个答案:

没有答案