[英]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.