2016-03-25 33 views
0

我正在学习使用多处理库的python中的多线程。为此,我试图创建一个程序,将一个大文件分成几个小块。因此,我首先从该文件读取所有数据,然后创建从该输入文件获取一段数据的工作任务,然后将该段写入文件。我希望有尽可能多的并行线程作为段数运行,但这不会发生。我看到最多两个任务,然后程序终止。我在做什么错误。代码如下。Python的多处理并不是并行创建任务

import multiprocessing 

def worker(segment, x): 
    fname = getFileName(x) 
    writeToFile(segment, fname) 

if __name__ == '__main__': 
    with open(fname) as f: 
     lines = f.readlines() 
    jobs = [] 
    for x in range(0, numberOfSegments): 
     segment = getSegment(x, lines) 
     jobs.append(multiprocessing.Process(target=worker, args=(segment, x))) 
     jobs[len(jobs)-1].start() 
    for p in jobs: 
     p.join 
+0

仅供参考,你忘了叫'join',因此该方案实际上没有阻止那些'Process'es明确(它会隐除非它们发生重新守护进程)。 – ShadowRanger

+0

我确实调用了join,请参阅代码的最后两行。 – pythonic

+1

您引用了它。你没有打过电话。 'p.join'与'p.join()'有很大不同。 – ShadowRanger

回答

0

Process给你一个额外的线程(这与你的主进程,给你两个进程)。在每个循环结束时调用join将等待该过程在开始下一个循环之前完成。如果您坚持使用Process,则需要将返回的进程(可能位于列表中)存储起来,并在当前循环之后的循环中加入每个进程。

你想从multiprocessinghttps://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool)的Pool