在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通过opencv实现批量剪切图片
Nov 13 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
python之django母板页面的使用
Jul 03 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python中的枚举类型示例介绍
Jan 09 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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图片验证码代码
2008/03/27 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
JS中图片压缩的方法小结
2017/11/14 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
Python简单获取自身外网IP的方法
2016/09/18 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
Django接收自定义http header过程详解
2019/08/23 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
意大利网上药房:Farmacia 33
2020/01/27 全球购物
秋季运动会活动方案
2014/02/05 职场文书
致800米运动员广播稿
2014/02/16 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
财产保全担保书
2015/01/20 职场文书
质检员岗位职责范本
2015/04/07 职场文书
会计入职心得体会
2016/01/22 职场文书