在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 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
python基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Python import与from import使用及区别介绍
Sep 06 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
python脚本开机自启的实现方法
Jun 28 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
浅谈Django前端后端值传递问题
Jul 15 Python
pytorch实现手写数字图片识别
May 20 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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 array_unique之后json_encode需要注意
2011/01/02 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
DOM精简教程
2006/10/03 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
JS 表单验证大全
2011/11/23 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
利用Python如何将数据写到CSV文件中
2018/06/05 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
Python Json数据文件操作原理解析
2020/05/09 Python
pycharm永久激活超详细教程
2020/10/29 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
汽车维修专业个人求职信范文
2014/01/01 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
协议书样本
2014/04/23 职场文书
建筑投标担保书
2014/05/20 职场文书
质量承诺书怎么写
2014/05/24 职场文书
个人贷款收入证明
2014/10/26 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
nginx配置指令之server_name的具体使用
2022/08/14 Servers