在Python的一段程序中如何使用多次事件循环详解
作者:忆先 发布时间:2023-04-08 03:33:28
标签:python,事件循环,程序
背景
本文主要给大家介绍了关于在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


猜你喜欢
- 在制作表单的时候,我们往往用CSS来重新定义表单元素(如输入框、按钮等)的样式,以便看起来更加美观。而表单中的很多不同元素(如输入框、提交按
- uni-app的相关UI组件库中可能会没有你想要的功能组件,自己去开发的话需要花很多时间,此时咱们可以将别的UI组件库给安装到uni-app
- Mysql 远程连接配置实现的两种方法大家在公司工作中,经常会遇到mysql数据库存储于某个人的电脑上,大家要想连接mysql服务,装有my
- 当你使用UPDATE, INSERT, DELETE语句更新数据的时候,你就改变了两个地方的数据:log buffer和data buffe
- 在日常工作中,除了需要从 JSON 转化为 Go 的数据结构。但往往相反的情况是:我们需要将数据以 JSON 字符串的形式发送到 Web 服
- 除非您正在对服务进行原型设计,否则您可能会关心应用程序的内存使用情况。占用更小的内存,会使基础设施成本降低,扩展变得更容易。尽管 Go 以不
- 简介到目前为止,我们查阅anaconda的官网可发现,由于目前Anaconda没有支持arm架构的版本,在M1芯片Mac上安装的Anacon
- 混淆矩阵 混淆矩阵(Confusion Matrix)是机器学习中用来总结分类模型预测结果的一
- 前言在深度学习训练的过程中,随着网络层数的提升,我们训练的次数,参数都会提高,训练时间相应就会增加,我们今天来了解迁移学习一、经典的卷积神经
- bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据
- 今天用python 使用pyinstaller打包exe出现错误环境pyqt5 + python3.6 32位在导入pyqt5包之前加上如下
- 前言我们写好的gin项目想要部署在服务器上,我们应该怎么做呢,接下来我会详细的讲解一下部署教程。1.首先我们要有一台虚拟机,虚拟机上安装好g
- 主要作用与拷贝文件用的。1.shutil.copyfileobj(文件1,文件2):将文件1的数据覆盖copy给文件2。import shu
- 什么是ODBCODBC是open database connect的缩写,意思是开放式数据库连接利用ODBC进行数据库连接首先要下载数据库!
- 首先要挂代理,但是还不够,pycharm默认不使用代理,需要进行设置找到代理软件的HTTP代理地址,将地址和端口填入设置中即可来源:http
- <script> function isIPv6(str) { return str.mat
- json.dumps将一个Python数据结构转换为JSONimport jsondata = { 'na
- Pycharm - Python 开发工具通过 agent 代理使用1、下载 Pycharm下载地址2、支持本代理包支持 2020 版本3、
- 1 re.search() 的作用:re.search会匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None 从源
- 简介序列化的目的是方便数据的传输和存储,在PHP中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。反序列化中常见的魔