首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以判断异步事件循环是否已满负荷?

是否有一种方法可以判断异步事件循环是否已满负荷?
EN

Stack Overflow用户
提问于 2019-09-20 03:16:19
回答 2查看 938关注 0票数 7

我正在运行一个异步应用程序,它需要多个事件循环来服务大量IO操作(同时超过1000次)。事件循环在单独的线程中运行,在提交的协同线上永远循环。

我正在寻找一种方法来识别现有事件循环何时接近满负荷,这样我就可以根据需要启动一个新的事件循环线程,而不是预先指定要运行多少个事件循环。

接近容量将意味着事件循环保持忙碌,比如当时的80%+。如果事件循环在等待状态中花费的时间少于其时间的20%,那么是时候添加另一个事件循环线程了。

看起来每线程都不容易:Thread配置Python CPU使用情况

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-20 07:02:26

我正在寻找一种方法来识别现有的事件循环何时接近满容量,这样我就可以启动一个新的事件循环线程

我不认为这种方法可以工作,因为吉尔。您所描述的用例是由于CPU过载而导致的事件循环停滞。如果是这样的话,添加更多的线程不会有任何帮助,因为除了罕见例外之外,在Python中没有并行化的CPU工作。

如果您的事件循环做了太多与CPU相关的工作(例如计算),则应该使用run_in_executor将这些单独的工作单元移到单独的线程中。如果这还不够,您可以尝试切换到uvloop,这是CPython的一种高性能异步插入替代。您还可以使用PyPy尝试异步。

如果这些选项都不起作用,那么接下来要尝试的是多处理的一些变体。(或者是一种更低层次/面向性能的语言。)

票数 2
EN

Stack Overflow用户

发布于 2019-09-20 21:14:46

如果您想利用更多可用的机器资源,就更容易将此任务委托给管理多个python进程的外部主管

在容量限制上产生更多的进程听起来像是负载均衡器应该做的事情。

将这项工作委托给时间证明的解决方案似乎比在Python (事实上)上编写自己的解决方案更好。我也对将应用程序业务逻辑与部署相关细节相结合的想法持怀疑态度,这些细节可能会根据具体的服务器基础设施而改变。

aiohttp有一个很好的基本部署过程的手册

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

https://stackoverflow.com/questions/58021338

复制
相关文章

相似问题

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