0

我的代碼獲取事件通知,我用它來處理事件。早些時候它是單線程的,但事件通知處理起來相當快。我改變了我的代碼,使用Pool進行多處理。這就是我所做的是multiprocessing.Pool使用我所有的進程?

  • 創建Pool = multiprocessing.pool(processes=4)(我可以處理最多11個核心)
  • 事件添加到池異步 - pool.apply_async(go, ["event-1"])

這就是我所做的。以簡單的方式,我將事件添加到池中,池將由4個進程處理。現在我的問題是。

  • 我該如何測試我的事件是通過使用所有4個進程來處理的?我每週日開始我的日程安排,星期一很好,週二我仍然看到週一的事件正在處理中,星期三的數量會增長很多星期二事件在星期三處理,等等......

我基本上是Java傢伙,我很難找到Python如何在內部處理我的事件。我可以簡單地增加流程,但我不確定這是否有幫助?

我的基本要求是

  • 我註冊自己的事件,並希望處理每一個事件
  • 我想處理的單獨處理事件,因此主進程/線程仍然繼續監聽新事件
  • 我並不擔心處理事件的結果。 (但pool.apply_async(func1,["event1"])返回值)

請你能幫我填補一些想法嗎?

回答

2

Pool.apply將事件放入池的隊列中,第一個空閒進程將執行它以執行go(event)

一個簡單的方法來找出哪個過程正在做什麼是什麼是將一些日誌記錄添加到您的go功能。

import logging 
import os 

def go(event): 
    logging.info("process: %d, event: %r", os.getpid, event) 
    #do actual processing 

你想在你的池中有多少進程取決於你有什麼樣的工作量。如果你的工作是CPU繁重,那麼大於內核數量的工作池並不會有多大幫助。但是,如果您的瓶頸是IO,您可能會從更多的員工中受益,並且您應該考慮切換到線程(請參閱multiprocessing.pool.ThreadPool)。

相關問題