2014-08-29 59 views
-1

我有一个python脚本child.py,这是被称为一些其它的脚本在main.py 执行的一次迭代,child.py需要近400毫秒如何平行,有效地运行一个python脚本使用多线程/多?

现在我想执行的多个实例child.py同时(并行)。我用多处理模块来创建多个进程,通过将呼叫在for循环中。

当我运行一个迭代用了,400毫秒。但是当我增加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的功能,这是被称为

+1

您要求我们调试您的代码,而不向我们显示任何代码?你如何期待这个工作?你几乎可以肯定在你的代码中做了错误的事情,但是有很多事情你可能会做错,没有人会去猜测每一种可能性。 – abarnert 2014-08-29 23:25:00

回答

1

你在为你的每一次迭代调用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() 
+0

哦!! ...真的吗?我认为p.join()会让所有后续的子进程等待,但不是单个进程。 – dotslash 2014-08-30 12:16:26