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
相关文章推荐
- 上班时候,老被腾讯弹出来的新闻打扰,很少烦恼,于是编写了一小程序,用于彻底解决这个问题,并代码开源,以防杀毒软件告诉你是病毒
- 编写第一个XML-RPC程序遇到的问题总结
- eclipse 编写Android程序问题总结
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- 用VS2010编写的C++程序,在其他电脑上无法运行,提示缺少mfc100.dll的解决办法 vc链接静态库的时候要注意的问题
- spark1.6升级spark2.1时候sparkstreaming程序问题总结2018
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- 使用VS2013编写Python程序时出现编码问题的解决办法
- python程序打包问题总结
- 蛇舞2013抽奖程序的编写和QT技巧问题梳理总结<QT>
- 编写程序常见问题总结
- 转:eclipse编写python程序解决中文乱码问题
- 编写windows phone7程序到现在,解决的问题总结。
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- 编写程序时候出现了问题ClassCastException: interface javax.xml.soap.Text
- 在你用JSP-servlet编写程序时候可以用以下简单的乱码处理解决!!
- 在绘图程序编写过程中遇到的问题~
- JCreator 4.0编写程序中的中文显示问题!!
- 如何编写高质量的程序 其他编程经验总结
- 存储过程程序编写总结