在Python的一段程序中如何使用多次事件循环详解


Posted in Python onSeptember 07, 2017

背景

本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构

import asyncio
async def doAsync():
 await asyncio.sleep(0)
 #...
if __name__ == "__main__":
 loop = asyncio.get_event_loop()
 loop.run_until_complete(doAsync())
 loop.close()

这当然是很不错的,但当你第二次使用loop的时候程序就会抛出异常RuntimeError: Event loop is closed,这也无可厚非,理想的程序也应该是在一个时间循环中解决掉各种异步IO的问题。

但放在终端环境如Ipython中,如果想要练习Python的异步程序的编写的话每次都要重新开启终端未免太过于麻烦,这时候要探寻有没有更好的解决方案。

解决方案

我们可以使用asyncio.new_event_loop函数建立一个新的事件循环,并使用asyncio.set_event_loop设置全局的事件循环,这时候就可以多次运行异步的事件循环了,不过最好保存默认的asyncio.get_event_loop并在事件循环结束的时候还原回去。

最终我们的代码就像这样。

代码

import asyncio
async def doAsync():
 await asyncio.sleep(0)
 #...
def runEventLoop()
 loop = asyncio.new_event_loop()
 asyncio.set_event_loop(loop)
 loop.run_until_complete(doAsync())
 loop.close()
if __name__ == "__main__":
 oldloop = asyncio.get_event_loop()
 runEventLoop()
 runEventLoop()
 asyncio.set_event_loop(oldloop)

感想

事件循环本来就是要一起做很多事情,在正式的Python代码中还是只用一个默认的事件循环比较好,平时的学习练习的话倒是随意了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python3.6正式版新特性预览
Dec 15 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
python+opencv识别图片中的圆形
Mar 25 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
Python实现图片转字符画的代码实例
Feb 22 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
Python 如何调试程序崩溃错误
Aug 03 Python
Python使用Pygame绘制时钟
Nov 29 Python
教你学会使用Python正则表达式
Sep 07 #Python
Python基础学习之常见的内建函数整理
Sep 06 #Python
Python升级导致yum、pip报错的解决方法
Sep 06 #Python
Python实现求两个csv文件交集的方法
Sep 06 #Python
Python中的is和==比较两个对象的两种方法
Sep 06 #Python
Python中表示字符串的三种方法
Sep 06 #Python
通过Python实现自动填写调查问卷
Sep 06 #Python
You might like
浅析PHP数据导出知识点
2018/02/17 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
超简单的微信小程序轮播图
2019/11/22 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
跟老齐学Python之数据类型总结
2014/09/24 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
python实现简易数码时钟
2021/02/19 Python
python模拟斗地主发牌
2020/04/22 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
费用会计岗位职责
2014/01/01 职场文书
代理协议书
2014/04/22 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android