我正在运行一个异步应用程序,它需要多个事件循环来服务大量IO操作(同时超过1000次)。事件循环在单独的线程中运行,在提交的协同线上永远循环。
我正在寻找一种方法来识别现有事件循环何时接近满负荷,这样我就可以根据需要启动一个新的事件循环线程,而不是预先指定要运行多少个事件循环。
接近容量将意味着事件循环保持忙碌,比如当时的80%+。如果事件循环在等待状态中花费的时间少于其时间的20%,那么是时候添加另一个事件循环线程了。
看起来每线程都不容易:Thread配置Python CPU使用情况
发布于 2019-09-20 07:02:26
我正在寻找一种方法来识别现有的事件循环何时接近满容量,这样我就可以启动一个新的事件循环线程
我不认为这种方法可以工作,因为吉尔。您所描述的用例是由于CPU过载而导致的事件循环停滞。如果是这样的话,添加更多的线程不会有任何帮助,因为除了罕见例外之外,在Python中没有并行化的CPU工作。
如果您的事件循环做了太多与CPU相关的工作(例如计算),则应该使用run_in_executor将这些单独的工作单元移到单独的线程中。如果这还不够,您可以尝试切换到uvloop,这是CPython的一种高性能异步插入替代。您还可以使用PyPy尝试异步。
如果这些选项都不起作用,那么接下来要尝试的是多处理的一些变体。(或者是一种更低层次/面向性能的语言。)
https://stackoverflow.com/questions/58021338
复制相似问题