在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进行基础的函数式编程的教程
Mar 31 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
Python中的元组介绍
Jan 28 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
Jun 27 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
Python接口测试get请求过程详解
Feb 28 Python
python调用API接口实现登陆短信验证
May 10 Python
基于Python脚本实现邮件报警功能
May 20 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
小程序实现分类页
2019/07/12 Javascript
js 函数性能比较方法
2020/08/24 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python的一些用法分享
2012/10/07 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
Python文件操作基本流程代码实例
2017/12/11 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
python3将变量输入的简单实例
2020/08/19 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
幼儿教师演讲稿
2014/05/06 职场文书
工地安全标语
2014/06/07 职场文书
个人先进事迹材料
2014/12/29 职场文书
家长通知书家长意见
2014/12/30 职场文书
小学安全工作总结2015
2015/05/18 职场文书