是否有一个用于测量异步事件循环指标的模块?还是异步事件循环,我们应该监视哪些指标以进行性能分析?
例如
我不是要测量协程功能。 aiomonitor具有功能,但并非我所需要的。
答案 0 :(得分:0)
我几乎不相信待处理任务的数量或任务摘要会告诉您很多信息。假设您有10000个任务,其中有8000个待处理:是很多,不是吗?谁知道。
事实是-每个asyncio
任务(或任何其他Python对象)可以消耗不同数量的不同机器资源。
我认为最好监视常规指标,而不是监视asyncio
特定对象:
asyncio
的后果是,您应该始终使用asyncio.Semaphore来限制当前正在运行的作业的最大数量,并实现一种方便的方式来更改信号量的值(例如,通过配置文件)
这将允许根据具体计算机的可用和实际使用的资源来改变其工作量。
更新:
我的问题,在此期间asyncio是否仍会接受新连接 阻止?
如果您的事件循环被某些CPU计算所阻止,则asyncio
将在以后开始处理新的连接-当事件循环再次空闲时(如果此时它们没有超时)。
您应该始终避免冻结事件循环的情况。冻结事件循环的位置意味着代码中所有位置的所有任务也会被冻结!任何类型的循环冻结都打破了使用异步方法的整个思路,而与任务数无关。冻结事件循环的任何类型的代码都会出现性能问题。
如前所述,可以将ProcessPoolExecutor
与run_in_executor一起使用来等待CPU绑定的内容,但是也可以使用ThreadPoolExecutor
来避免冻结。