是否有一个模块来测量异步事件循环度量?或者对于异步事件循环,为了性能分析目的,我们应该监视哪些指标?
例如:
我不是想测量协同线的功能。aiomonitor有这个功能,但不是我所需要的。
发布于 2019-01-09 07:00:12
我不相信挂起的任务或任务摘要的数量会告诉你很多。假设您有10000项任务,其中有8000项尚未完成:任务太多了,不是吗?谁知道呢。
问题是-每个asyncio任务(或任何其他Python )都可以消耗不同数量的不同机器资源。
与其试图监视特定于asyncio的对象,我认为更好的做法是监视通用度量:
对于asyncio,您可能应该始终使用asyncio.Semaphore来限制当前运行的作业的最大数量,并实现一种更改信号量值的方便方法(例如,通过配置文件)。
它将允许根据可用和实际使用的资源在具体机器上更改工作负载。
Upd:
我的问题是,异步仍然会在这个块中接受新的连接吗?
如果您的事件循环被某些CPU计算所阻塞,asyncio将在事件循环再次空闲时(如果此时没有时间)开始处理新的连接。
您应该始终避免冻结事件循环的情况。冻结了某个地方的事件循环意味着代码中所有的任务都被冻结了!任何类型的循环冻结都破坏了使用异步方法的整个想法,而不管任务的数量如何。任何类型的代码,其中的事件循环被冻结将有性能问题。
正如您注意到的,您可以使用ProcessPoolExecutor和遗嘱执行人来等待CPU绑定的内容,但也可以使用ThreadPoolExecutor来避免冻结。
https://stackoverflow.com/questions/54100516
复制相似问题