python - 分析 Tornado/Asyncio 时哪些函数是免费的?

标签 python tornado python-asyncio

我正在运行一个相当复杂的 Tornado TCP 服务器应用程序,我想了解什么花费了时间,以便我可以提高性能。我使用的是 Tornado v5+,因此 Tornado 由 asyncio 支持。

我在事件循环线程上运行统计分析器,发现类似以下的堆栈很常见:

tornado/ioloop.py::run_sync
asyncio/asyncio.py::start
asyncio/base_events.py::run_forever
asyncio/base_events.py::_run_once
asyncio/events.py::_run
torando/ioloop.py::<lambda>
torando/platform/asyncio.py::add_callback
asyncio/base_events.py::call_soon_threadsafe
asyncio/selector_events.py::_write_to_self
    csock.send(b'\0')

tornado/ioloop.py::run_sync
asyncio/asyncio.py::start
asyncio/base_events.py::run_forever
asyncio/base_events.py::_run_once
asyncio/events.py::selector_events.py::_read_from_self
    data = self._ssock_recv(4096)

无论是事件时还是安静时,它们都会占用大约 40% 的计算时间。我应该关心它们,还是这些只是系统等待某些事情发生时的等待状态?

最佳答案

每当使用IOLoop.add_callback时,这两个堆栈总是成对出现。这不是空闲状态,而是开销,预计不会占用 40% 的时间。另外 60% 的时间应该能让您了解正在发生的事情。在我看来,也许你有某种无限循环或运行无限系列协程的东西。

关于python - 分析 Tornado/Asyncio 时哪些函数是免费的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51582394/

相关文章:

nginx - 使用 nginx 反向代理在生产中设置 Tornado Web 服务

python - 将 aiohttp 与多处理结合起来

Python:有没有一种线程安全的方法来知道lock.acquire()是否已阻塞(并继续阻塞)?

python - tkinter 中的检查按钮未将值存储到变量中

python - 无法让 crypt 正常工作

python - 如何运行 bottle + tornado + ssl (https) + spdy

python - 在 AWS Elastic Beanstalk 上部署 Tornado 应用程序

python-3.x - asyncio 实现了什么样的事件驱动处理模式?

python - 排队任务的数量;如何避免全局变量?

python - 使用 XlsxWriter 和 Python Excel 进行循环