2014-08-29 69 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