我阅读了“旋风”web服务的以下代码。它周期性地调用一个函数do_work()。
event_loop = asyncio.get_event_loop()
async def run_periodically(interval, func):
while True:
print(f"...{datetime.datetime.now()}")
await func()
await asyncio.sleep(interval)
print(f"start.... {datetime.datetime.now()}")
func = lambda: do_work("arg_1", kw1="kw_1")
task = event_loop.create_task(run_periodically(10, func)) # is create_task() needed here?
# task = run_periodically(10, func) # this line works too
event_loop.run_until_complete(task)
tornado.ioloop.IOLoop.current().start()为run_periodically()创建一个任务有意义吗?用task = run_periodically(10, func)替换行很好。
do_work()示例
async def do_work(arg1, kw1):
"""To be run periodically"""
await asyncio.sleep(1)
print(f"...{datetime.datetime.now()}: args: {arg1} kwargs: {kw1}")发布于 2022-04-01 04:07:14
在这种情况下,您可以使用任务和可互换的共同例程,因为它在前台运行。当您想在后台运行时,您需要将协同例程包装在一个任务中。你可以在这里读到更多关于这个类似问题的书面答复:https://stackoverflow.com/a/57968602
https://stackoverflow.com/questions/71701567
复制相似问题