在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网络编程学习笔记(10):webpy框架
Jun 09 Python
Python脚本实现格式化css文件
Apr 08 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
Python中装饰器学习总结
Feb 10 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
Python中垃圾回收和del语句详解
Nov 15 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
python Pexpect模块的使用
Dec 25 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 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 中的批处理的实现
2007/06/14 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
微信支付的开发流程详解
2016/09/13 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
linux安装python修改默认python版本方法
2019/03/31 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
研究生毕业鉴定
2014/01/29 职场文书
会计岗位描述
2014/02/22 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL
Java实现注册登录跳转
2022/06/16 Java/Android