我正在尝试异步修改python3中异步函数的返回值。抱歉,这令人困惑...也许下面的代码将有助于澄清。
下面的代码有效,但是我想知道是否有更优雅的方式编写“ resolve_user”函数,这是我唯一可以修改的函数。
from aiodataloader import DataLoader
import asyncio
class MyUserLoader(DataLoader):
async def batch_load_fn(self, keys):
print('Keys', keys)
return keys
def resolve_user(dataloader, key):
promise = dataloader.load(key)
async def to_upper():
value = await promise
return value.upper()
return to_upper()
async def test():
dataloader = MyUserLoader()
req1 = resolve_user(dataloader, 'user1')
req2 = resolve_user(dataloader, 'user2')
print('Values', await req1, await req2)
asyncio.run(test())
上面的代码显示以下内容,这是我想要的行为。加载调用已批量处理。
Keys ['user1', 'user2']
Values USER1 USER2
如果resolve_user函数如下所示:
async def resolve_user(dataloader, key):
return (await dataloader.load(key)).upper()
然后将不批处理装入调用。这是因为等待呼叫阻塞。程序将打印以下内容:
Keys ['user1']
Keys ['user2']
Values USER1 USER2
再一次,我想知道是否还有一种更Python化的方式来编写第一个resolve_user实现。