redis-py 退出时不关闭线程

2023-12-25

我正在使用 redis-py 2.10.6 和 redis 4.0.11。

我的应用程序使用 redis 作为数据库和 pubsub。当我关闭时,我经常会遇到挂起或崩溃的情况。后者通常会抱怨处理 pubsub 回调时发生的错误文件描述符或文件上的 I/O 错误(我不使用任何错误),所以我猜测根本问题是相同的:不知怎的,我不'无法正确断开连接,并且我的 redis.Redis 对象使用的池处于活动状态。

前一种错误的输出示例(在 _read_from_socket 期间):

redis.exceptions.ConnectionError:从套接字读取时出错:(9,'错误文件描述符')

其他时候,堆栈跟踪清楚地显示 redis/connection.py -> redis/client.py -> threading.py,这证明 redis 没有杀死它使用的线程。

当我启动应用程序时,我运行:

self.redis = redis.Redis(host=XXXX, port=XXXX)
self.pubsub = self.redis.pubsub()
subscriptions = {'chan1': self.cb1, 'chan2': self.cb2}  # cb1 and cb2 are functions
self.pubsub.subscribe(**subscriptions)
self.pubsub_thread = self.pubsub.run_in_thread(sleep_time=1)

当我想退出应用程序时,我执行的最后一条指令main是对我的 redis using 类中函数的调用,其实现是:

self.pubsub.close()
self.pubsub_thread.stop()
self.redis.connection_pool.disconnect()

我的理解是,理论上我什至不需要执行任何这些“关闭”调用,但是,无论有或没有它们,我仍然无法保证彻底关闭。

我的问题是,我该如何保证干净关闭?


我遇到了同样的问题,这很大程度上是由于 redis 库对关闭处理不当造成的。在清理期间,线程继续处理新消息,并且不考虑套接字不再可用的情况。在对代码进行了一些搜索之后,我找不到一种方法来阻止额外的处理而不只是等待。

由于这是在关闭阶段运行的,并且它是第 3 方库的补救措施,因此我并不太担心sleep,但理想情况下应该更新库以防止在关闭时采取进一步的操作。

self.pubsub_thread.stop()
time.sleep(0.5)
self.pubsub.reset()

这可能值得在上发布问题日志或 PRredis-py https://github.com/andymccurdy/redis-py图书馆。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis-py 退出时不关闭线程 的相关文章

  • 需要FTP文件而不存储解释器文件通过Python保存在本地

    我正在尝试做一些图像解释器并尝试将它们直接存储到 FTP 服务器 但我的步骤是从本地文件夹上传图像 然后将其转换为蒙版图像 然后它将获得最终输出 但是在我的蒙版和最终输出场景中 临时图像被保存在本地 这是我不想要的 但如果不将图像存储在本地
  • Kubernetes Python 客户端连接问题

    我已经设置了官方 Kubernetes Python 客户端 https github com kubernetes client python https github com kubernetes client python 我正在运行
  • 列表子类的 Python 类型

    我希望能够定义列表子类的内容必须是什么 该类如下所示 class A list def init self list init self 我想包括打字 这样就会发生以下情况 import typing class A list typing
  • 使用 xlwings 排序(pywin32)

    我需要使用 python 按给定行对 Excel 电子表格进行排序 为了进行测试 我使用以下数据 在名为 xlwings sorting xlsx 的文件中 Numbers Letters Letters 2 7 A L 6 B K 5 C
  • 避免 Python 3 的多处理队列中的竞争条件

    我正在尝试找到大约 61 亿 自定义 物品的最大重量 并且我想通过并行处理来完成此操作 对于我的特定应用程序 有更好的算法不需要我迭代超过 61 亿个项目 但解释它们的教科书超出了我的能力范围 我的老板希望在 4 天内完成此任务 我认为我公
  • 将 pandas DataFrame 中的数字转换为特定字符串格式

    我需要运行一个可以通过循环完成的任务 但我想有一种更有效 更漂亮的方法来做到这一点 我有一个DataFrame它有一个整数列 我想将其转换为 4 位字符串表示形式 也就是说 3 应转换为 0003 234 应转换为 0234 我正在寻找一种
  • Python3.5 BeautifulSoup4从div中的'p'获取文本

    我试图从 div 类 caselawcontent searchable content 中提取所有文本 此代码仅打印 HTML 不打印网页中的文本 我缺少什么来获取文本 以下链接位于 finteredcasesdoc text 文件中 h
  • 导入错误 - 发生了什么?

    Python 导入 再次 我有这个文件结构 test start py from scripts import main scripts init py empty main py from import install install p
  • Selenium Python Firefox webdriver:无法修改配置文件

    我想在 Webdriver Firefox 实例上使用 新选项卡而不是窗口 选项 1 我创建了一个启用此选项的配置文件 但是当我使用该配置文件时 很多选项都可以 但不是这个 2 加载配置文件后 我尝试更改代码中的选项 但它不起作用 我的代码
  • 如何使用 win32com.client api 访问 MS Word 的脚注

    我正在尝试使用 win32com client api 访问 MS Word 文件的脚注 我已经用谷歌搜索过 但没能找到合适的方法 我使用 python docx 来实现上述目的 但我发现当前版本的 python docx 无法访问 MS
  • Redis 客户端忽略其上设置的配置选项并尝试连接到默认 IP 127.0.01

    在AWS中 我使用ElastiCache Redis服务器并使用节点作为后端和 promise redis 包 这就是我尝试连接到我的 redis 服务器端点的方法 client redis createClient host my red
  • FastAPI/Pydantic 接受任意 post 请求正文吗?

    我想创建一个 FastAPI 端点 它只接受任意的 post 请求正文并返回它 如果我发送 foo bar 我想得到 foo bar 后退 但我也希望能够发送 foo1 bar1 foo2 bar2 并把它拿回来 我试过 from fast
  • 使用 Boto3 进行 IAM 身份验证的 SQLAlchemy 可刷新凭证

    我使用 Boto3 生成的身份验证令牌通过 Sqlalchemy 连接到 Amazon RDS self client boto3 client rds region name eu central 1 self token self cl
  • 无法使用 beautifulsoup 模块 python 从 HTML 检索温度值

    我正在使用 BeautifulSoup4 来解析此 HTML 查看源代码 https weather com en IN weather today l 17 39 78 49 https weather com en IN weather
  • Python3 中使用 Gtk 和 XLib 的全局热键

    我的 X System 应用程序保留在后台 并在面板中作为指示器 并且每当用户按下某个键时都应该弹出 无论活动窗口是什么 类似于菜单应用程序 尝试了以下方法 在 Linux 上用 python 监听全局组合键 https stackover
  • 初始化 dask 分布式工作线程的状态

    我正在尝试做类似的事情 resource MyResource def fn x something dosemthing x resource return something client Client results client m
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 如何使用Python和h5py读取HDF5属性(元数据)

    我有一个 HDF5 文件 里面有多个文件夹 每个文件夹都添加了属性 有些将属性称为 元数据 我知道如何访问文件夹内的键 但不知道如何使用 Python 提取属性h5py包裹 以下是 HDFView 的属性 Folder1 800 4 Gro
  • 如何按键中的值对 Redis 哈希进行排序

    Redis 有没有一种好方法来获取按值排序的哈希中的键 我查看了文档 但没有找到直接的方法 另外有人可以解释一下redis中的排序是如何实现的 以及什么吗 本文档 http redis io commands SORT using hash
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr

随机推荐

  • 使用ggplot2在地图上绘制条形图

    我必须使用在地图上绘制条形图ggplot2 library ggplot2 q ggplot data mapindia aes long lat group group colour geom polygon fill FF9999 co
  • java:稀疏位向量[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 中有哪些著名的稀疏位向量库吗 是否有关于稀疏与稀疏使用它们的有用程度的指南 java uti
  • 用于平面到嵌套/分层的 XSLT,具有级别插值?

    给定这个源 XML 文档 输入 xml p content p p content p p content p p content p p content p p content p p content p p content p p co
  • 在 swift 中实现文档选择器 (iOS)

    我想在我的 iOS 应用程序中选择任何类型的文件 pdf docs xlsx jpeg txt rtf 等 功能 点击时Upload按钮 我希望我的应用程序打开一个目录并选择文件 DocumentsPicker IBAction pickD
  • 使用 python 处理 excel 时出错

    当我的脚本同时更新一个 Excel 时 如果我要手动执行任何其他工作 而另一个 Excel 会发生错误 我正在使用调度 from win32com client import Dispatch excel Dispatch Excel Ap
  • Angular:Nodemailer 显示大量运行时错误

    在我的角度项目中 我想使用节点邮件程序发送邮件 第一个问题是当我尝试导入时 我的意思是在执行 npm i save 之后 当我这样做时会发生很多错误ionic serve 我想重复一件事 写完之后import行 这个大错误日志来了 应用程序
  • System.IO.File.Delete() / System.IO.File.Move() 有时不起作用

    Winforms 程序需要将一些运行时信息保存到 XML 文件中 该文件有时可能有几百千字节大小 在 Beta 测试期间 我们发现一些用户会毫不犹豫地看似随机地终止进程 有时会导致文件写入一半并因此损坏 因此 我们更改了算法以保存到临时文件
  • 语音搜索权限

    Running 谷歌语音搜索 https play google com store apps details id com google android voicesearch在我的 ICS Android 4 0 4 平板电脑上出现奇怪
  • 用于为 Java 应用程序构建交互式 shell 的库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找可以让我创建交互式 shell 的 Java 库 我已经做了一些搜索 但还没有找到很多 我发现的大部分内容都是用于向我的应用程序
  • Docker:使用 --volume 绑定安装的文件权限

    我遵循以下指南 https denibertovic com posts handling permissions with docker volumes https denibertovic com posts handling perm
  • C++ 使用模板对象进行操作

    我有课 class BarBase 和一个派生模板类 它存储一个指向成员函数的指针和一个指向同一类的对象的指针 template
  • Excel/VBA - 如何在字符串中每 N 个字符插入一个字符

    我有一份报告 导出时它在单个单元格中将订单号 始终为 7 位长 显示为单个字符串 例如 订单 1234567 和 9876543 将在单个单元格中显示为 12345679876543 每个单元格没有最大订单数 每个单元格的最大订单数都不同
  • 如何以编程方式更改 Mac OS X 中的背景?

    我将如何以编程方式更改 Mac OS X 中的桌面背景 我想使用 python 但我对任何可能的方式都感兴趣 我可以连接到终端并调用某个命令吗 来自 python 如果你有应用脚本 http appscript sourceforge ne
  • 如何将 URL 数组中的图像列表添加到文档中?

    假设我有一个充满图像源 URL 的数组 例如 var imgs http lorempizza com 380 240 http dummyimage com 250 ffffff 000000 http lorempixel com g
  • 将记录添加到 has_and_belongs_to_many 关系

    我有两个模型 用户和促销 这个想法是 一个促销可以有很多用户 一个用户可以有很多促销 class User lt ActiveRecord Base has and belongs to many promotions end class
  • Intellij 14 + lombok:@Slf4j 找不到符号日志

    Intellij 无法识别 SLF4J 注释 我有以下错误 Error 105 9 java cannot find symbol symbol variable log location class com xxxxx SdsConfig
  • 从groovy脚本加载脚本

    文件1 groovy def method println test 文件2 groovy method 我想在运行时加载 包含 File1 groovy 中的函数 方法 相当于 ruby s rake 的加载 它们位于两个不同的目录中 如
  • 如何在 Google Colab 中拆分代码单元?

    使用Jupyter Notebook我发现分割单元格的功能非常有用 我也想在 Google Colab 中执行此操作 但我找不到如何执行此操作 能做到吗 如果答案是肯定的 怎么办 我不知道如何通过菜单选择来完成此操作 但在 Jupyter
  • 使用 NetNamedPipe 的 WCF 多个应用程序

    我正在尝试在同一台计算机上运行多个 WCF 服务托管应用程序 我想运行多个应用领域 不在一个应用程序中提供多项服务 var host new ServiceHost typeof MyClass1 new Uri new Uri net p
  • redis-py 退出时不关闭线程

    我正在使用 redis py 2 10 6 和 redis 4 0 11 我的应用程序使用 redis 作为数据库和 pubsub 当我关闭时 我经常会遇到挂起或崩溃的情况 后者通常会抱怨处理 pubsub 回调时发生的错误文件描述符或文件