在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 06 Python
Python 常用string函数详解
May 30 Python
Python内建模块struct实例详解
Feb 02 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python几种常用功能实现代码实例
Dec 25 Python
dpn网络的pytorch实现方式
Jan 14 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
浅析matlab中imadjust函数
Feb 27 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
python 两种方法删除空文件夹
Sep 29 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/10/08 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
简单的js计算器实现
2016/10/26 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
express启用https使用小记
2019/05/21 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
如何利用python查找电脑文件
2018/04/27 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
办公室主任先进事迹
2014/01/18 职场文书
施工材料员岗位职责
2014/02/12 职场文书
经典演讲稿开场白
2014/08/25 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
python使用BeautifulSoup 解析HTML
2022/04/24 Python