您的位置:首页 > 编程语言 > Python开发

Python中异步程序编写时候多次循坏问题总结

2018-03-27 13:59 441 查看

问题:

在《每日一课》Python入门之异步IO中,存在着这样一个问题,代码如下:import asyncio

@asyncio.coroutine
def hello():
print("Hello world!")
# 异步调用asyncio.sleep(1):
r = yield from asyncio.sleep(1)
print("Hello again!")

# 获取EventLoop:
loop = asyncio.get_event_loop()
# 执行coroutine
loop.run_until_complete(hello())
loop.close()这个程序是没有问题的,但是当我们第二次使用loop的时候程序就会抛出异常
RuntimeError: Event loop is closed
,这也是有一定道理的,我们理想当中的的情况也应该是在一个时间循环中解决掉各种异步IO的问题。但是因为我们是处于练习写程序、学习的状态,所以每次如果总是要重启终端再来编写程序进行练习的话,确实过于麻烦了,所以现在就介绍一种解决方法(当然方法很多的,各有各的不同)。

方法:

可以使用
asyncio.new_event_loop
函数建立一个新的事件循环,这时候就可以多次运行异步的事件循环了。
结果:
上面的代码可以修改如下:import asyncio

@asyncio.coroutine
def hello():
print("Hello world!")
# 异步调用asyncio.sleep(1):
r = yield from asyncio.sleep(1)
print("Hello again!")

def runEventLoop():
loop = asyncio.new_event_loop()
#asyncio.set_event_loop(loop)
loop.run_until_complete(hello())
loop.close()

runEventLoop()
这样就可以对代码进行自己想要的修改,而且可以反复执行并不会抛出异常:RuntimeError: Event loop is closed
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐