Pas*_*ino 5 python python-asyncio aiohttp
我在aiohttp应用程序中有一个控制器动作.
async def handler_message(request):
try:
content = await request.json()
perform_message(x,y,z)
except (RuntimeError):
print("error in perform fb message")
finally:
return web.Response(text="Done")
Run Code Online (Sandbox Code Playgroud)
perform_message是异步函数.现在,当我调用动作时,我希望我的动作尽快返回,并且perform_message放入事件循环.
这样,不执行perform_message
use*_*555 13
最简单的形式:
import asyncio
from datetime import datetime
def _log(msg : str):
print(f"{datetime.utcnow()} {msg}")
async def dummy(name, delay_sec):
_log(f"{name} entering ...")
await asyncio.sleep(delay_sec)
_log(f"{name} done for the day!")
async def main():
asyncio.create_task(dummy('dummy1', 5)) # last to finish
asyncio.create_task(dummy('dummy2', 3)) # 2nd
asyncio.create_task(dummy('dummy3', 1)) # First to finish
_log(f"Yo I didn't wait for ya!")
await asyncio.sleep(10)
asyncio.get_event_loop().run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)
输出:
2022-09-18 00:53:13.428285 Yo I didn't wait for ya!
2022-09-18 00:53:13.428285 dummy1 entering ...
2022-09-18 00:53:13.428285 dummy2 entering ...
2022-09-18 00:53:13.428285 dummy3 entering ...
2022-09-18 00:53:14.436801 dummy3 done for the day!
2022-09-18 00:53:16.437226 dummy2 done for the day!
2022-09-18 00:53:18.424755 dummy1 done for the day!
Run Code Online (Sandbox Code Playgroud)
fre*_*ish 11
一种方法是使用create_task函数:
import asyncio
async def handler_message(request):
...
loop = asyncio.get_event_loop()
loop.create_task(perform_message(x,y,z))
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9590 次 |
最近记录: |