[英]is multiprocessing.Pool making use of all my processes?
我的代码获得事件通知,并且我曾经在获得事件后立即对其进行处理。 之前是单线程的,但是事件通知处理它们的速度非常快。 我将代码更改为使用Pool进行多处理。 这就是我所做的
Pool = multiprocessing.pool(processes=4)
(我最多可以处理11个内核) pool.apply_async(go, ["event-1"])
那就是我所做的。 我以简单的方式将事件添加到池中,池将由4个进程处理。 现在我的问题是。
我基本上是Java专家,很难发现python在内部处理事件的方式。 我可以简单地增加流程,但是不确定是否有帮助?
我的基本要求是
pool.apply_async(func1,["event1"])
返回值) 请您能帮我解决一下问题吗?
Pool.apply将事件放入池的队列中,抓取该go(event)
的第一个空闲进程将执行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
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.