在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通过get,post方式发送http请求和接收http响应的方法
May 26 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
TensorFlow平台下Python实现神经网络
Mar 10 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
python创建学生成绩管理系统
Nov 22 Python
基于Python获取城市近7天天气预报
Nov 26 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
python和c语言哪个更适合初学者
Jun 22 Python
如何利用Python 进行边缘检测
Oct 14 Python
Python eval函数介绍及用法
Nov 09 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHP面向对象概念
2011/11/06 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
最短的IE判断代码
2011/03/13 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
vue Render中slots的使用的实例代码
2017/07/19 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
JavaScript实现联动菜单特效
2020/01/07 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
python之wxPython应用实例
2014/09/28 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
使用python绘制常用的图表
2016/08/27 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
python多进程读图提取特征存npy
2019/05/21 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
授权委托书范文
2014/07/31 职场文书
求职自我评价范文100字
2014/09/23 职场文书
小学优秀教师材料
2014/12/15 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
公司周年庆典致辞
2015/07/30 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android