【问题标题】:check if function is async in python 3.7 [duplicate]检查python 3.7中的函数是否异步[重复]
【发布时间】:2019-06-22 23:14:04
【问题描述】:

我想在 python 中调用一个函数之前检查它是否是异步的。例如,在这里我想检查 f 是否是异步的,这样 await 才有意义:

async def call_async_f(f):
    assert function_is_async(f)
    await f()

如何实现function_is_async?我正在使用 python 3.7,它似乎有一些有趣的新异步功能,我不介意特定于 3.7 的解决方案。

【问题讨论】:

  • 为什么不尝试除外?
  • 函数不必定义为async,返回值可以等待。
  • 这是个坏主意,因为f 可能是一个同步函数,它返回一个可等待对象(Future、协程对象等),就像一个可迭代对象可以是许多不同的类型一样...

标签: python python-asyncio python-3.7


【解决方案1】:

inspect 可以检查大多数类型的异步对象,在您的情况下是 iscoroutinefunction

import inspect
async def call_async_f(f):
    assert inspect.iscoroutinefunction(f)
    await f()

【讨论】:

    猜你喜欢
    • 2015-03-17
    • 2021-11-07
    • 2020-03-21
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多