元上下文:
我正在使用 aiohttp 构建一个 api。由于它是一个异步框架,因此我必须使用 async 来定义处理程序。示例:
async def index_handler(request):
return web.Response(text="Hello, world")
app = web.Application()
app.router.add_route("GET", "/", index_handler)
代码上下文:
在开发过程中,我发现自己处于这样的情况:嵌套函数调用:
def bar():
return "Hi"
async def foo():
return bar()
await foo()
当我考虑性能时,我不知道是否应该将这些嵌套函数也全部异步执行。示例:
async def bar()
return "Hi"
async def foo():
return await bar()
await foo()
问题:
进行嵌套函数调用以优化性能的最佳方法是什么?始终使用异步/等待还是始终使用同步?这有什么区别吗?
在您的情况下,您不需要异步所有内容,除非您的代码可能会阻止某些事情,例如:
def bar():
"""This function is not async because there is no need to."""
return "Hi"
async def foo():
return bar()
await foo()
但是,如果您的功能栏例如休眠或在内部执行一些异步功能,那么您应该异步该功能
async def bar():
"""This function needs to be async because there
are operations that potentially could block"""
await asyncio.sleep(1)
return "Hi"
async def foo():
return bar()
await foo()
总而言之,如果您正在使用异步操作,您需要非常清楚地了解程序如何运行以及它在做什么,以避免到处都使用异步操作。