【发布时间】:2020-09-24 00:35:19
【问题描述】:
我目前有一个类似 Cache 的对象,它有一个 aget 方法,它接收要返回的对象的名称,如果键不存在则回调协程。
import asyncio
class Cache:
def __init__(self):
self.cache = {}
async def aget(self, name, default):
try:
return self.cache["name"]
except KeyError:
return await default
async def foo():
pass
async def bar(cache):
obj = await cache.aget("duh", foo())
# If "duh" doesn't exist, then await foo() and return it
cache = Cache()
asyncio.run(bar(cache))
所以假设密钥确实存在,那么foo() 将永远不会被等待,从而引发RuntimeWarning 抱怨协程没有被安排。
问题: 是否有一种clean 方法可以选择性地等待协程,而无需像 @987654325 那样解压协程及其参数@。我不考虑将 RuntimeWarning 作为一个选项,因为它存在于它的用例中。
【问题讨论】:
标签: python python-asyncio