在Python的一段程序中如何使用多次事件循环详解
作者:忆先 时间:2023-04-08 03:33:28
背景
本文主要给大家介绍了关于在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代码中还是只用一个默认的事件循环比较好,平时的学习练习的话倒是随意了。
来源:https://segmentfault.com/a/1190000011013476
标签:python,事件循环,程序
0
投稿
猜你喜欢
Python socket如何解析HTTP请求内容
2022-05-06 20:09:23
Javascript中作用域的详细介绍
2024-04-18 10:02:09
AJAX请求类下载
2007-08-23 08:33:00
Python fire模块(最简化命令行生成工具)的使用教程详解
2022-06-10 15:25:00
简单谈谈Python中的反转字符串问题
2022-02-24 11:55:07
Python for Informatics 第11章 正则表达式(一)
2021-01-27 06:43:43
python 利用 PIL 将数组值转成图片的实现
2021-03-28 07:17:13
Python3.9.1中使用split()的处理方法(推荐)
2022-04-17 23:16:12
Python网络编程中urllib2模块的用法总结
2022-05-26 18:49:53
python模拟登录并且保持cookie的方法详解
2023-09-06 06:07:16
Microsoft .Net Remoting系列教程之一:.Net Remoting基础篇
2024-05-09 09:03:35
SQL 中 CASE 表达式的使用方式
2024-01-23 14:18:47
Python基于回溯法子集树模板解决m着色问题示例
2023-11-14 12:22:59
jupyter .ipynb转.py的实现操作
2023-12-15 04:03:11
SQL按照日、周、月、年统计数据的方法分享
2024-01-24 13:48:27
linux环境下python中MySQLdb模块的安装方法
2024-01-26 23:17:27
Oracle常见错误诊断
2010-07-27 12:56:00
Vue 列表渲染 key的原理和作用详解
2024-05-03 15:11:21
[翻译]标记语言和样式手册 Chapter 11 打印样式
2008-02-11 18:44:00
分享9个好用的Python技巧
2021-03-15 18:43:05