我正在使用 python 3.9
我想檢查在異步中呼叫同步函式時會發生什么
我有 test.py
import snoop
def get_chat_id(name):
time.sleep(3)
return "chat-%s" % name
async def main():
result = get_chat_id("django")
print(result)
if __name__ == "__main__":
main()
當我嘗試跑步時,我得到
$ python test.py
/home/user/test.py:13: RuntimeWarning: coroutine 'main' was never awaited
main()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
然后我試著把await之前main()
import snoop
import asyncio
def get_chat_id(name):
time.sleep(3)
return "chat-%s" % name
async def main():
result = get_chat_id("django")
print(result)
if __name__ == "__main__":
await main()
當我跑步時,我得到
$ python test.py
File "/home/user/test.py", line 13
await main()
^
SyntaxError: 'await' outside function
那么讓這個腳本作業的正確方法是什么
uj5u.com熱心網友回復:
從檔案中參考:
請注意,簡單地呼叫協程不會安排它執行 [...]
為了實際運行協程,asyncio 提供了三種主要機制:
- 的
asyncio.run()函式來運行頂層入口點“主()”函式(見上面的例子)。
給定的示例如下:
import asyncio
async def main():
print('hello')
await asyncio.sleep(1)
print('world')
asyncio.run(main())
所以你的情況是:
import asyncio
async def get_chat_id(name):
await asyncio.sleep(3)
return "chat-%s" % name
async def main():
result = await get_chat_id("django")
print(result)
if __name__ == "__main__":
asyncio.run(main())
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/396559.html
標籤:蟒蛇-3.x
