在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
  • asp之家 网络编程 m.aspxhome.com