在函数中知道它是同步调用还是异步调用的

2024-10-02 18:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有人知道任何神奇的函数可以告诉我运行的函数是同步调用还是异步调用的。长话短说,我想做以下几点:

def fsync():
    was_called_async() # >>> False

async fasync():
    was_called_async() # >>> True

fsync()
await fasync()

这听起来可能有点奇怪,我同意。原因是我正在尝试实现一个类似于^{}的函数,但用于同步和异步方法。这需要使用一个装饰器,因此需要“等待内省”。我目前的工作方法here如预期的那样工作:

from toolbox.cofunc import cofunc
import asyncio
import time

@cofunc
def hello():
    time.sleep(0.01)
    return "hello sync world!"

@hello.register
async def _():
    await asyncio.sleep(0.01)
    return "hello async world!"

async def main():
    print(hello())        # >>> "hello sync world!"
    print(await hello())  # >>> "hello async world!"

asyncio.run(main())

但是,它使用了^{}模块,我不想依赖它(获取前一帧并搜索await)。如果有人知道另一种选择,那就太好了


Tags: 方法函数importasynciohelloworldasynctime
1条回答
网友
1楼 · 发布于 2024-10-02 18:24:10

只是没有一个好的方法来做你想做的事情

函数“同步调用”与“异步调用”之间没有实际区别。无论哪种方式,函数都只是被调用

最接近差异的是调用方对返回值的处理,但即使是查找await也不是一个好主意,因为

await asyncio.gather(yourfunc(), something_else())

asyncio.run(yourfunc())

直觉上会被认为是“异步的”

到目前为止,最可靠的选择是只有两个功能

相关问题 更多 >