如何在Python Enum中调用异步函数?

8cdiaqws  于 2023-02-15  发布在  Python
关注(0)|答案(1)|浏览(136)

我想把我的代码从sync重构为async。我使用Python和FastAPI。我使用枚举中调用async函数的方法。
例如:

from enum import Enum
from app.story import get_story

    StoriesEnum = Enum(
        "StoriesEnum", {story: story  for story in get_story.story_list},
    )

get_story是返回Story类的async函数,并且它具有story_list
我怎样才能awaitget_story.story_list
我试过:

  • asyncio.run()
  • get_event_loop()
  • async发生器

没有成功的结果。它们不起作用是因为awaitasync函数之外。

bjg7j2ky

bjg7j2ky1#

根据documentation
您可能已经注意到await只能在使用async def定义的函数内部使用。
但同时,用async def定义的函数必须被"等待"。因此,用async def定义的函数也只能在用async def定义的****函数内部调用。
因此,您可以做的是:

import asyncio

async def go(): 
    return Enum("StoriesEnum", {s:s for s in (await get_story()).story_list.value})

StoriesEnum = asyncio.run(go())
print({e:e.value for e in StoriesEnum})

如果你提供一个minimal reproducible example,它会很有帮助。

相关问题