请问:Python的Ascynio模块怎么中止EventLoop?
请教一个Python的Ascynio模块中止异步IO的EventLoop的问题。现在我有2个任务,任务1的执行时间可能比较长(比如35秒左右),任务2的执行时间非常短、可以认为瞬间完成。我需要的代码是:先执行任务1,然后等待30秒,如果任务1完成了那么结束;如果任务1没完成那么去执行任务2然后结束。
以下代码是个非常简单的并发执行,
@asyncio.coroutine
def async_task_1():
执行任务1
@asyncio.coroutine
def async_task_2():
yield from asyncio.sleep(30)
执行任务2
loop = asyncio.get_event_loop()
tasks = [async_task_1, async_task_2]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
但是以上代码有个缺陷:毕竟是loop.run_until_complete,也就是说即使任务1执行时间奇长,loop也会等它到地老天荒。但是我要的是最多等30秒,如果等不到任务1完成,那就做任务2然后结束。任务2的运行时间几乎为0。请问这个该怎么实现呢?
谢谢了先!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
题主的真正需求:给任务1设置个 超时,超过一定时间,就放弃执行。转而执行任务 2。
所以可以考虑对任务 1 使用 asyncio.wait_for 包裹一下。
举个?:
另外,题主的题目可以修改一下,因为你只是想要中止一个 task 或者说一个 coroutine,并非中止 eventloop。