我有一个python脚本child.py,它将由其他脚本main.py调用对于一次执行迭代,child.py需要近400ms
现在我想同时(并行)执行child.py的多个实例。我使用多处理模块通过将调用放入for循环来创建多个进程。
当我运行一次迭代时,花费了400毫秒。但当我增加for循环中的迭代次数时,执行时间也以400ms的倍数增加。
所以看起来执行是以同步的方式进行的,而不是并行执行。
我通过在日志文件中放置时间戳来验证执行时间。
有没有办法实现近400ms的执行时间,即使是脚本的大量并行执行?
这是我的脚本:
for device in device_list:
q= Queue.Queue()
p =Process(target=get_current_value,
args=(q,),
kwargs=
{
'device': device,
'service_list': service_list,
'data_source_list': data_source_list}
)
p.start()
p.join()
logger.debug('data_source_list :'+ pformat(g.get()))
get_current_value是脚本child.py中的函数,它被称为
在for循环的每一次迭代中都调用p.join()
,这意味着您要启动一个进程,等待它完成,然后再转到下一个进程。所以你并没有真正并行地做任何事情。删除对p.join()
的调用,您应该会得到实际的并发执行。
for device in device_list:
q = Queue.Queue()
p = Process(target=get_current_value,
args=(q,),
kwargs=
{
'device': device,
'service_list': service_list,
'data_source_list': data_source_list}
)
p.start()
#p.join()