我正在运行一个相当复杂的 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/