欣赏一个尚未关闭的python运行时bug

news2024/9/23 5:26:29

这是一个语言的运行时错误,在linux环境,跨语言使用共享内存时,会触发。它会在python程序退出时,自行销毁sharedMemory,即便此时还有其他的进程在使用——这会让C/Python跨进程调用几乎没有办法进行。

python程序运行完毕会弹出错误信息:

UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown

然后你定义的sharedMemory就被python随手析构了。如果涉及C调用python,与共享内存相关的数据只能读,无法从python传出——因为python会析构它。共享内存本来就是为了在进程间高效传递二进制参数和运算结果的——这个bug会这类跨进程协同的设计无法进行。

python语言维护群组,对这个问题的相关原始讨论参见下面代码中的注释中的那个链接地址。现有的python发行版本中还没有消除这个bug——因为有一些其他的关联考量。我拷贝了一份github的快照,有兴趣的同学可以读读看,这是我职业生涯中遭遇的第二处runtime lib bug,至少在2019年已经有人报告,它居然还没有正式修复(截止2024/5/15)。。。 

然后,更奇妙的是使用python的monkey patch,用户可以自行封堵住这个bug。下面是github讨论中提到的补丁:

# 使用monkeypatch给python代码打补丁:
# 解决python程序在退出时自动销毁关联的sharedmemory的bug.
# 只需要在你的python应用程序启动时,调用:patch_ban_shm_tracing()就可以封堵住这个bug.
#
# 相关原始信息:
#     https://github.com/python/cpython/issues/82300

from multiprocessing import resource_tracker
 
def fix_register(name, rtype):
    if rtype == "shared_memory":
        return
    return resource_tracker._resource_tracker.register(self, name, rtype)
 
def fix_unregister(name, rtype):
    if rtype == "shared_memory":
        return
    return resource_tracker._resource_tracker.unregister(self, name, rtype)
 
def patch_ban_shm_tracing():
    resource_tracker.register = fix_register
    resource_tracker.unregister = fix_unregister
    if "shared_memory" in resource_tracker._CLEANUP_FUNCS:
        del resource_tracker._CLEANUP_FUNCS["shared_memory"]
 

这是一个很好的切入点,大家可以看看python语言本身的维护策略。开源环境,似乎类似的问题我们可以看到很多,比如:

上面是cJson.c的一处原生注释...对技术领域的文艺青年, 探查这些注释,帖子,比对开源源代码间的差异,发掘相关的故事,其实是很好的素材。

技术问题的暴露和最终的解决,所涉及的权衡,对大多数人来说,也是足够好的经验习得来源。它们可以向我们展示正确的设计该是什么样的。

created at May15,2024(zz)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为、小米、魅族都开始造车了!中国还有多少手机厂家要下场造车?2024如果创业适合干什么?2024最适合创业的细分行业

要说现在中国最火、声量最高的创业是什么?那一定是造车! 小米这样的手机公司在造车、创维这样的电视家电品牌在造车、甚至就连五粮液这样的白酒品牌也在造车!至于其他的还有什么做地产的恒大、做电动车的新日等等,数不数胜。而在手…

数据结构~~带环链表的环开始的节点位置**两种方法

1.带环链表环开始的位置 (1)上面的这个测试用例使用的是包含了4个节点的带环链表,我们要找的就是链表里面的环开始的节点的位置,拿这个测试用例而言,就是2这个节点,从这个节点开始,我们的链表就…

Shopee、Lazada等平台怎么做测评?

最近有很多人咨询南哥跨境电商平台测评应该怎么做,今天我就针对东南亚站点,详细跟大家分享一下东南亚平台测评需要哪些资源 测评环境系统 不管做任何平台,首先你要有一个稳定的测评环境系统,测评环境系统的底层逻辑就是通过一台…

【Uniapp】图片修复对比组件

效果图 不废话&#xff0c;直接上源码&#xff01; 组件直接用 <template><viewclass"img-comparison-container":style"width: width rpx;height: height rpx"><view class"before-image" :style"width: x rpx&quo…

两大DRAM巨头20%产能转给HBM

随着人工智能(AI)需求的激增&#xff0c;全球领先的内存芯片制造商三星(Samsung)和SK海力士(SK Hynix)预计&#xff0c;由于高性能芯片需求不断增长&#xff0c;今年DRAM和高带宽内存(HBM)的价格将保持强劲。据《韩国经济日报》报道&#xff0c;三星和SK海力士已将其超过20%的D…

实验12:综合实验

1、实验目的及要求&#xff1a; 通过本次实验完成一个小型网络中配置设备。实现配置一个路由器、两个交换机和两台PC&#xff0c;以支持IPv4和IPv6连接&#xff1b;路由器和交换机必须安全管理&#xff0c;配置VLAN间路由、DHCP、以太网通道和端口安全。通过登录思科网络技术学…

Beego 使用教程 6:Web 输入处理

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发&#xff0c;包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado&#xff0c; Sinatra 和 Flask beego 官网&#xff1a;http://beego.gocn.vip/ 上面的 bee…

⭐解读绍兴BSCI验厂攻略⭐

&#x1f308;解读&#x1f50d;绍兴BSCI验厂攻略&#x1f308; &#x1f60a;深入解读&#x1f449;绍兴BSCI验厂攻略&#x1f448;&#xff0c;助力企业&#x1f481;‍♂️顺利通过国际认证&#x1f990; &#x1f497;在全球化日益&#x1f9ed;加速的今天&#xff0c;&…

我的职场加速器-高效工作从可道云teamOS开始

不论是作为管理者&#xff0c;还是普通打工人&#xff0c;在日常工作中&#xff0c;我们都需要一款既能够保障数据安全&#xff0c;又能够提升团队协作效率的平台。 近期&#xff0c;我体验了可道云teamOS&#xff0c;这款企业级云协作平台给我留下了深刻的印象。 一、极简风…

Pytorch代码基础—张量

Pytorch代码—张量 Pytorch张量 张量的属性&#xff1a; data&#xff1a;被包装的Tensorgrad&#xff1a;data的梯度grad_fn:创建Tensor的Function&#xff0c;是自动求导的关键requires_grad&#xff1a;指示是否需要梯度isleaf&#xff1a;指示是否是叶子结点&#xff0…

SpringBoot应用

文章目录 第一章、SpringBoot基础内容一、Spring和SpringBoot1、Spring介绍2、SpringBoot介绍 二、SpringBoot2入门操作1、在线构建2、idea构建 三、浅谈自动装配的原理 第二章、SpringBoot核心功能一、配置文件1、配置文件介绍2、语法规则3、数据类型4、案例使用 二、WEB开发1…

JavaScript基础知识强化:变量提升、作用域逻辑及TDZ的全面解析

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 ⭐️ 引言&#x1f3af; 变量提升(Hoisting)&#x1f47b; 暂时性死区&#xff08;Temporal Dead Zone, TDZ&#xff09;解释&#x1f4e6; var声明&#x1f512; let与const声明&#x1f4d6; 函数声明 与 函数表达式函数声…

【案例教程】土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测

查看原文>>>土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测 土地利用/土地覆盖数据是生态、环境和气象等领域众多模型的重要输入参数之一。基于遥感影像解译&#xff0c;可获取历史或当前任何一个区域的土地利用/土地覆盖数据&#xff0c;用于评估区域的生…

U盘制作PE后容量少了一半,如何恢复默认空间

格式化U盘 以前制作U盘PE后&#xff0c;从原本64G的容量变成了32G&#xff0c;一直也没去关注处理。 恰巧这两天又遇到U盘无法识别&#xff0c;数据无法读取&#xff0c;想着格式化恢复。 很遗憾&#xff0c;发现利用电脑快速格式化依然无法直接拿到空闲的另一半空间。 磁盘管…

[图解]SysML和EA建模住宅安全系统-03

1 00:00:00,490 --> 00:00:01,180 怎么加 2 00:00:01,570 --> 00:00:04,380 我们来看&#xff0c;这是刚才那个图 3 00:00:05,200 --> 00:00:06,390 17.7 4 00:00:07,150 --> 00:00:08,260 我们同样在这里加 5 00:00:08,430 --> 00:00:10,100 同样在这个下面…

超越人工智能:AnyTool,一款基于GPT-4的智能代理,引领API调用新纪元

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;探索 AnyTool 的创新应用 在人类文明的发展历程中&#xff0c;我们不断探索和创新&#xff0c;利用各种工具增强我们的能力并提高生产效率。…

Python 全栈系列243 S2S flask_celery

说明 按现有的几个架构部件&#xff0c;构建数据流。 S Redis Stream。这个可以作为缓冲队列和简单任务队列&#xff0c;速度非常快&#xff0c;至少是万条/秒的速度。 Q RabbitMQ。这个作为任务队列&#xff0c;消息也主要是元数据。读速比较慢&#xff0c;但有一些特性&a…

百元以内的蓝牙耳机哪个牌子好?2024四大高品质品牌推荐!

通常对于预算有限的消费者来说&#xff0c;如何在百元以内找到一款品质卓越、性能出色的蓝牙耳机&#xff0c;确实是一个值得深思的问题&#xff0c;为了满足广大消费者的需求&#xff0c;我特别筛选了2024年四大高品质蓝牙耳机品牌&#xff0c;它们在价格亲民的同时&#xff0…

ACWing471. 棋盘-DFS剪枝

题目 思路 本思路参考博客AcWing 471. 棋盘 - AcWing 约束方程&#xff1a; 代码 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 110, INF 0x3f3f3f3f; int g[N][N], n, m, dist[N][N]; int dx[4] {-1…