在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 相关文章推荐
python 域名分析工具实现代码
Jul 15 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
python @property的用法及含义全面解析
Feb 01 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
python根据url地址下载小文件的实例
Dec 18 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
Python 操作 ElasticSearch的完整代码
Aug 04 Python
python字符串下标与切片及使用方法
Feb 13 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
php访问查询mysql数据的三种方法
2006/10/09 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
kmock javascript 单元测试代码
2011/02/06 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
微信JS接口大全
2016/08/25 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
python实现12306火车票查询器
2017/04/20 Python
详解django自定义中间件处理
2018/11/21 Python
python程序封装为win32服务的方法
2021/03/07 Python
Django框架模板用法入门教程
2019/11/04 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python实现数字的格式化输出
2020/08/01 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
大学专科自荐信
2014/06/17 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android