2015-01-09 39 views
0

晚上好,通過10重複處理500個事件10?

我想同時運行一個像500進程的東西,並決定寫一個管理工作的池。然而,它很沉重,內存看起來不像它會處理它。 任何建議打開/使用一個池,將執行10或50或50的進程? 謝謝

這是我現在正在處理的方式。

def get_data_mp(args): 
    settings = args 

    procs = len(settings.ticker_list) 
    pool = multiprocessing.Pool(procs) 
    tickers = pool.map(get_file_mp, [(settings,i) for i in range(procs)]) 
    pool.close() 
    pool.join() 

通常特效的數量是500左右的功能get_file_mp頗重,因此當一切都在內存中,電腦遭受了很多。這就是爲什麼我希望有一種方法來執行這些過程10乘10或50乘50,因爲我注意到計算機能夠處理這種工作量。

+0

Python有一個多處理池,可以爲您管理所有事情。檢查https://docs.python.org/2/library/multiprocessing.html。我不清楚你如何試圖運行500個進程。請詳細說明。 – Aziz

回答

0

我會創建兩個線程,一個是您的事件隊列線程,另一個是事件調度線程。

  • 事件隊列線程是您的500個進程向其發送事件的地方。一旦它獲得了一個它睡覺的事件。
  • 事件隊列線程將等待作業到達閾值或上次事件調度發生的時間。你的門檻將是10或50或任何你想要的。
  • 在達到這個閾值或時間它會批10或50事件,並將它們傳遞給工作分派線程,睡覺去再次
  • 你的事件調度線程會遍歷事件,並呼籲每一個處理程序,然後再次入睡。

這就是如果你真的想批量處理事件,我個人寧願不批量他們,並嘗試優化「實時」執行。

+0

Thanks.Sounds聰明。 爲什麼你不建議批量?你會如何嘗試優化?我真的尋找可以優化的小循環,但記憶不像我所有。我必須說,我對編程還是一個新鮮的東西,所以任何想法或建議對我來說都是件好事:) –

+0

不客氣。不推薦批處理的原因是因爲它更復雜,增加了更多的代碼,在事件處理中引入了延遲,並且集中了使用和處理內存以及平滑內存 – hhafez