用于检查异步代码路径是否执行同步I/O的构建时工具



假设我有以下程序

import requests
async def foo():
res = await get_resource()
status_code = await make_request(res)
print(f"status code: {status_code}n", res)
async def get_resource():
# ...
with open('file') as f:
return f.read()
async def make_request(data):
return requests.post('/create', data=data).status_code

这个程序作为async没有任何好处,并且可能会妨碍事件循环中其他代码的性能。显然,这是一个简单的例子,但在多个文件和开发人员中,可能不那么容易发现。

如果我能在我的构建管道中添加一些可以检测到这种情况的东西,那就太棒了。是否有任何Python构建工具可以指示此异步代码需要同步I/O?

您可以使用异步调试模式。除其他外,如果一个功能花费超过100ms(可能会调整(,它会显示日志消息:

WARNING: Executing <Task finished coro=<inner() done, defined at
asyncio_debug.py:33> result=None created at asyncio_debug.py:43>
took 0.101 seconds

最新更新