【发布时间】:2017-04-13 14:08:08
【问题描述】:
假设我们有一个 IO 操作的异步调用,我们想要记录它。 最简单的方法如下所示:
async def f():
logger.log('io was called')
await call_some_io()
但是当我们运行 log() 函数时,我们显然会遇到这种情况,该函数会切换上下文并记录其他内容,并且仅在执行 call_some_io() 之后。
下一个方法看起来更健壮:
async def f():
await call_some_io()
logger.log('io was called')
我们正在等待 call_some_io() 并在它之后记录它。看起来在这种情况下我们有一致的调用。
但是还有第三种使用上下文管理器的方法:
async def f():
with LoggingContext:
await call_some_io()
这里的LoggingContext 是一些ContextManager,其中__exit__ 方法有一些日志调用。
所以问题是:哪种记录异步调用的方法最常见且最可靠?
【问题讨论】:
标签: python asynchronous python-3.5 python-asyncio