我正在编写一个客户端-服务器应用程序。当连接时,客户端向服务器发送一个 "心跳" 信号,例如每秒钟一次。 在服务器端,我需要一个机制,可以添加要异步执行的任务(或协程或其他内容)。此外,当客户端停止发送“心跳”信号时,我想从客户端取消任务。
换句话说,当服务器启动任务时,它具有超时时间或 ttl,例如 3 秒钟。当服务器收到“心跳”信号时,它会重新设置计时器,以便再等待 3 秒钟,直到任务完成或客户端断开连接(停止发送信号)。
这是一个关于取消来自 asyncio 在 pymotw.com 上的教程中任务的示例。但是这里的任务被取消之前,事件循环尚未开始,这对我不太适合。
import asyncio
async def task_func():
print('in task_func')
return 'the result'
event_loop = asyncio.get_event_loop()
try:
print('creating task')
task = event_loop.create_task(task_func())
print('canceling task')
task.cancel()
print('entering event loop')
event_loop.run_until_complete(task)
print('task: {!r}'.format(task))
except asyncio.CancelledError:
print('caught error from cancelled task')
else:
print('task result: {!r}'.format(task.result()))
finally:
event_loop.close()
asyncio
的解决方案,那将会更好,因为它是标准库的一部分,而不是第三方库。 - Sergey Belash