2012-12-21 39 views
2

我剛剛寫了一個腳本,旨在全天候運行以更新一些文件。但是,如果更新一個文件需要3分鐘,那麼更新100個文件需要300分鐘。如何管理程序週轉時間?

是否可以運行n個腳本實例來管理n個單獨的文件以加快週轉時間?

+1

線程.....如果文件和更新是真正獨立的。 – duffymo

+1

程序I/O是否被綁定?如果是這樣,那麼添加更多流程就沒有意義了。如果它是CPU綁定,那麼也許。你知道什麼限制了你的程序速度嗎? –

+0

我認爲我的程序運行如此緩慢的原因是因爲我使用python + imacros來全天候更新我的網站。因爲我使用了很多for循環。它是在完成循環之前分別遍歷每條路徑。我在想,如果頁面數量增加到100個,則需要永久更新。我現在主要關心的是,同時更新網站可能會導致數據傳輸方面的衝突(即數據混淆)。 –

回答

2

是的,這是可能的。使用multiprocessing模塊啓動多個併發進程。這具有如下優點:由於全局解釋器鎖定和線程,您不會遇到問題,如手冊頁中所述。手冊頁面包含了使腳本並行執行所需的所有示例。當然,如果流程不需要交互,那麼這最適合您的示例。

+0

hochl,我必須重寫整個腳本才能進行多處理嗎?腳本登錄到私人網站以檢索數據並更新它。那麼,腳本的多個實例會發生衝突嗎?如果任何人有類似的經驗,請分享。 –

+0

當然,有幾個進程可能同時訪問日誌記錄網站。如果可以同時進行日誌記錄,那麼沒有問題,但這一切都取決於您的Implementation,我們不知道,但可以同步e過程,如'17.2.1.3中所解釋的。進程之間的同步「,因此對於那些關鍵部分,您可以同步代碼。引用:「例如,可以使用鎖來確保一次只有一個進程打印到標準輸出。」 – hochl

2

我建議你先找出是否有辦法在單線程中減少3分鐘。 我用來發現加速機會的方法是demonstrated here

這也會告訴你,如果你是純粹的I/O限制。 如果您完全受I/O限制,並且所有文件都位於單個磁盤上,則並行性將無濟於事。 在這種情況下,可能將文件存儲在固態驅動器上會有所幫助。 @ hochl說,另一方面,如果你受CPU限制,並行性將會有所幫助。無論如何,找到加速機會並解決它們。 我從來沒有見過任何沒有一個或幾個的大尺寸程序。 這會給你一個加速因素,並行會給你另一個,總加速將是這兩個因素的產物。

+0

謝謝邁克。現在就讀它! –

+0

+1你就是:) – hochl