2016-05-13 43 views
0

我正在实施一个程序,用于大型学术文件中的特征选择。第一步是读取每个文件,生成克并进行一些预计算。我使用multiprocessing.pool来使程序运行速度更快。这是我的代码:Python3多处理加入不能等待

#number of process 
processNum = 4 
pool_precompute = mp.Pool(processes = processNum) 

fileNum = len(filelist) 
offset = fileNum // processNum 

ProcessList = [] 
for i in range(processNum): 
    if (i == processNum - 1): 
     start = i * offset 
     end = fileNum 
    else: 
     start = i * offset 
     end = start + offset 

    #call the function 
    print (start, end, i) 
    ProcessList.append(pool_precompute.apply_async(get_kgrams_df_pmi, args = (start, end, filelist, i))) 
    #pool_precompute.apply_async(get_kgrams_df_pmi, args = (start, end, filelist, i)) 

pool_precompute.close() 
pool_precompute.join() 

我的程序必须等待所有创建的进程完成,然后继续下一步。但是,尽管我使用了join(),但我的程序根本无法挂起,似乎join()函数没有任何效果。请注意,每个进程都处理一些文件的数量,它们不需要彼此通信,也不共享任何变量,函数get_kgrams_df_pmi的返回值是函数中计算的整数(字数文件语料库)。如果有人能够找出问题,我将不胜感激。

回答

0

只是因为多功能程序池调用的函数中存在错误,它们停止并且不打印错误信息。