在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调用cmd命令行制作刷博器
Jan 13 Python
Django返回json数据用法示例
Sep 18 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
python 生成图形验证码的方法示例
Nov 11 Python
Numpy之random函数使用学习
Jan 29 Python
详解python多线程之间的同步(一)
Apr 03 Python
如何使用Python调整图像大小
Sep 26 Python
python用Configobj模块读取配置文件
Sep 26 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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
怎么使 Mysql 数据同步
2006/10/09 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
jQuery中:reset选择器用法实例
2015/01/04 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
js实现下一页页码效果
2017/03/07 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
建筑工地质量标语
2014/06/12 职场文书
植树节标语
2014/06/27 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
交通事故协议书范本
2016/03/19 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python