在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的web框架编写前端模版的教程
Apr 30 Python
Python编写生成验证码的脚本的教程
May 04 Python
python 环境变量和import模块导入方法(详解)
Jul 11 Python
pyqt5自定义信号实例解析
Jan 31 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
Python中for后接else的语法使用
May 18 Python
windows安装python超详细图文教程
May 21 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 expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
深入浅析python定时杀进程
2016/06/06 Python
深入解析Python中的线程同步方法
2016/06/14 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python使用tkinter实现简单计算器
2018/01/30 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
迎国庆演讲稿
2014/09/05 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫