【问题标题】:How to call async function in Python Enum?在枚举中调用异步函数
【发布时间】:2022-05-03 03:07:43
【问题描述】:

我想将我的代码从 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 是一个async 函数,它返回Story 类,它有story_list

我怎样才能awaitget_story.story_list

我试过了:

  • asyncio.run()
  • get_event_loop()
  • 异步生成器

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

【问题讨论】:

  • 谢谢你,克里斯。我将看看这个可重现的示例链接。通常我不提问,所以我需要时间让问题更具可读性并满足所有要求。

标签: python async-await enums fastapi


【解决方案1】:

根据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,那真的很有帮助。

【讨论】:

  • 谢谢你,克里斯。我将看看这个可重现的示例链接。通常我不提问,所以我需要时间让问题更具可读性并满足所有要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2020-03-09
  • 2021-12-25
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
相关资源
最近更新 更多