在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获取电脑硬件信息及状态的实现方法
Aug 29 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
python单例模式实例分析
Apr 08 Python
Python实现的特征提取操作示例
Dec 03 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Python基于scipy实现信号滤波功能
May 08 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
parser.add_argument中的action使用
Apr 20 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
python 如何在测试中使用 Mock
Mar 01 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 IP及IP段进行访问限制的代码
2008/12/17 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
pygame实现非图片按钮效果
2019/10/29 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
师德师风建设方案
2014/05/08 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
党校个人总结
2015/03/04 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python