首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何度量python异步事件循环度量?

如何度量python异步事件循环度量?
EN

Stack Overflow用户
提问于 2019-01-08 22:15:54
回答 1查看 960关注 0票数 1

是否有一个模块来测量异步事件循环度量?或者对于异步事件循环,为了性能分析目的,我们应该监视哪些指标?

例如:

  • 事件循环中有多少任务?
  • 在等待状态下有多少任务?

我不是想测量协同线的功能。aiomonitor有这个功能,但不是我所需要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-09 07:00:12

我不相信挂起的任务或任务摘要的数量会告诉你很多。假设您有10000项任务,其中有8000项尚未完成:任务太多了,不是吗?谁知道呢。

问题是-每个asyncio任务(或任何其他Python )都可以消耗不同数量的不同机器资源。

与其试图监视特定于asyncio的对象,我认为更好的做法是监视通用度量:

  • CPU使用率
  • RAM使用
  • 网络I/O (万一您正在处理)
  • 硬盘I/O (万一你正在处理)

对于asyncio,您可能应该始终使用asyncio.Semaphore来限制当前运行的作业的最大数量,并实现一种更改信号量值的方便方法(例如,通过配置文件)。

它将允许根据可用和实际使用的资源在具体机器上更改工作负载。

Upd:

我的问题是,异步仍然会在这个块中接受新的连接吗?

如果您的事件循环被某些CPU计算所阻塞,asyncio将在事件循环再次空闲时(如果此时没有时间)开始处理新的连接。

您应该始终避免冻结事件循环的情况。冻结了某个地方的事件循环意味着代码中所有的任务都被冻结了!任何类型的循环冻结都破坏了使用异步方法的整个想法,而不管任务的数量如何。任何类型的代码,其中的事件循环被冻结将有性能问题。

正如您注意到的,您可以使用ProcessPoolExecutor遗嘱执行人来等待CPU绑定的内容,但也可以使用ThreadPoolExecutor来避免冻结。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54100516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档