在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实现自动登录人人网并访问最近来访者实例
Sep 26 Python
Python中非常实用的一些功能和函数分享
Feb 14 Python
在Python中操作字典之update()方法的使用
May 22 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
Python实现KNN邻近算法
Jan 28 Python
详解Django中间件执行顺序
Jul 16 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
Python命令行参数argv和argparse该如何使用
Feb 08 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 和 COM
2006/10/09 PHP
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
Javascript之this关键字深入解析
2013/11/12 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
python中的函数用法入门教程
2014/09/02 Python
Python itertools模块详解
2015/05/09 Python
Python实现大文件排序的方法
2015/07/10 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
在Python中实现字典反转案例
2020/12/05 Python
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
大学生个人推荐信范文
2013/11/25 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
个人作风剖析材料
2014/02/02 职场文书
主办会计岗位职责
2014/03/13 职场文书
共产党员公开承诺书
2014/03/25 职场文书
工作说明书范文
2014/05/07 职场文书
2014年冬季防火方案
2014/05/21 职场文书
班级文化标语
2014/06/23 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技