gpt4 book ai didi

python-3.6 - 有没有办法判断 asyncio 事件循环是否满负荷?

转载 作者:行者123 更新时间:2023-12-04 00:15:07 28 4
gpt4 key购买 nike

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

我正在寻找一种方法来识别现有事件循环何时接近满负荷,以便我可以按需启动新的事件循环线程,而不是预先指定我想要运行的事件循环数量。

接近容量意味着事件循环在 80% 以上的时间都处于忙碌状态。如果事件循环花费不到 20% 的时间处于等待状态,则需要添加另一个事件循环线程。

每个线程似乎并不容易:Profile Python CPU Usage By Thread

最佳答案

I'm looking for a way to identify when an existing event loop is near full capacity so I can fire up a new event loop thread



我认为这种方法行不通,因为 GIL .您似乎正在描述的用例是由于 CPU 过载导致事件循环停止的用例。如果是这种情况,那么添加更多线程将无济于事,因为 CPU 工作正常,除了 rare exceptions ,未在 Python 中并行化。

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

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

关于python-3.6 - 有没有办法判断 asyncio 事件循环是否满负荷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58021338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com