我有一个python脚本child.py,由其他一些脚本main.py调用 对于一次执行迭代,child.py需要接近400ms
现在我想同时执行child.py的多个实例(并行)。我使用多处理模块通过将调用置于for循环中来创建多个进程。
当我运行一次迭代时,耗时400ms。但是当我增加for循环中的迭代次数时,执行时间也会增加近400ms的倍数。
所以看起来执行是以同步方式发生的,而不是并行执行。
我通过在记录文件中添加时间戳来验证执行时间。
有没有办法实现近400毫秒的执行时间,即使对于脚本的大量并行执行也是如此?
这是我的剧本:
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中的函数,被称为
答案 0 :(得分:1)
您在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()