也许你可以帮助我找到我在设置多处理功能时的错误。我设置了一个工作函数,它获取数据(浮点类型)并计算平均值。如果我使用以下代码(使用 join()),则不会启动多处理,每个 for 循环都会一个接一个地工作。计算出正确的值。
相反,当我删除 join() 函数时,并行处理已启用,但会出现错误,并且大部分计算数据是相同的。似乎工作进程不使用自己的变量列表。你能给我一个提示吗?谢谢你。斯特凡
for hostgroup in hostgroups:
jobs = []
#multiprocessing.log_to_stderr(logging.DEBUG)
p = multiprocessing.Process(target=worker, args=(hostgroup,hostsfile,mod_inputfile,outputdir,testmode,backup_dir,start_time,end_time,rrdname,unit,yesterday,now_epoch,rrd_interval,rrd_heartbeat,name))
jobs.append(p)
p.start()
p.join()
更新,与 Pool 一起使用,但仍不并行:
number_of_processes = len(hostgroups)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=number_of_processes)
for hostgroup in hostgroups:
result = pool.apply_async(worker, [hostgroup,hostsfile,mod_inputfile,outputdir,testmode,backup_dir,start_time,end_time,rrdname,unit,yesterday,now_epoch,rrd_interval,rrd_heartbeat,name])
print result.get(timeout=30)
更新,这似乎并行工作,但只有一些进程正确结束(总是不同):
number_of_processes = len(hostgroups)
if __name__ == '__main__':
pool = multiprocessing.Pool()
results = []
for hostgroup in hostgroups:
results.append(pool.apply_async(worker,[hostgroup,hostsfile,mod_inputfile,outputdir,testmode,backup_dir,start_time,end_time,rrdname,unit,yesterday,now_epoch,rrd_interval,rrd_heartbeat,name]))
pool.close()
pool.join()