我的代码获取事件通知,我过去就会处理事件。之前它是单线程的,但事件通知处理起来非常快。我改变了我的代码以使用Pool进行多处理。这就是我做的事情
Pool = multiprocessing.pool(processes=4)
(我可以处理最多11个核心)pool.apply_async(go, ["event-1"])
这就是我所做的一切。以简单的方式,我将向池和池中添加事件将由4个进程处理。现在我的问题是。
我基本上是Java家伙,我发现很难发现python如何在内部处理我的事件。我可以简单地增加流程,但我不确定这是否有帮助?
我的基本要求是
pool.apply_async(func1,["event1"])
返回值)请你能帮助我填写一些想法吗?
答案 0 :(得分: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
)。