簡體   English   中英

知道function里面是同步調用還是異步調用

[英]Know within function if it was called synchronously or asynchronously

我想知道是否有人知道任何神奇的 function 可能會告訴我運行的 function 是否已被同步或異步調用。 長話短說,我想做以下事情:

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

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

fsync()
await fasync()

這聽起來可能有點奇怪,我同意,這是理所當然的。 原因是因為我正在嘗試實現類似於functools.singledispatchmethod但用於同步和異步方法的 function 。 這需要使用裝飾器,因此需要“等待內省”。 我目前的工作方法在這里按預期工作:

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())

但是,它使用了inspect模塊,而不是我想要依賴的東西(獲取前一幀並搜索await )。 如果有人知道那將是可愛的替代方案。

只是沒有一個好方法來做你正在尋找的東西。

function 被“同步調用”或“異步調用”之間沒有實際區別。 無論哪種方式,function 都會被調用。

最接近差異的是調用者對返回值所做的事情,但即使尋找await也是一個壞主意,因為像

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

或者

asyncio.run(yourfunc())

直覺上會被認為是“異步的”。

到目前為止,最可靠的選擇是只有兩個功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM