在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 相关文章推荐
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
Python方法的延迟加载的示例代码
Dec 18 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
python进行TCP端口扫描的实现
Dec 21 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
解决python有时候import不了当前的包问题
Aug 28 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
python设置中文界面实例方法
Oct 27 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中如何直接执行SHELL
2013/06/28 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python正则表达式re之compile函数解析
2017/10/25 Python
django文档学习之applications使用详解
2018/01/29 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
python模拟表单提交登录图书馆
2018/04/27 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
大学生优秀自荐信范文
2014/02/25 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
软环境建设心得体会
2014/09/09 职场文书
2014年班级工作总结
2014/11/14 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang