我试图让 python2.7 多处理模块更加舒适。所以我编写了一个小脚本,它将文件名和所需的进程数作为输入,然后启动多个进程以将函数应用于队列中的每个文件名。它看起来像这样:
import multiprocessing, argparse, sys
from argparse import RawTextHelpFormatter
def parse_arguments():
descr='%r\n\nTest different functions of multiprocessing module\n%r' % ('_'*80, '_'*80)
parser=argparse.ArgumentParser(description=descr.replace("'", ""), formatter_class=RawTextHelpFormatter)
parser.add_argument('-f', '--files', help='list of filenames', required=True, nargs='+')
parser.add_argument('-p', '--processes', help='number of processes for script', default=1, type=int)
args=parser.parse_args()
return args
def print_names(name):
print name
###MAIN###
if __name__=='__main__':
args=parse_arguments()
q=multiprocessing.Queue()
procs=args.processes
proc_num=0
for name in args.files:
q.put(name)
while q.qsize()!=0:
for x in xrange(procs):
proc_num+=1
file_name=q.get()
print 'Starting process %d' % proc_num
p=multiprocessing.Process(target=print_names, args=(file_name,))
p.start()
p.join()
print 'Process %d finished' % proc_num
该脚本工作正常,并且每次旧进程完成时都会启动一个新进程(我认为这就是它的工作原理?),直到队列中的所有对象都用完。但是,脚本在完成队列后不会退出,而是处于空闲状态,我必须使用Ctrl+C
. 这里有什么问题?
感谢您的回答!