UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown

部署运行你感兴趣的模型镜像

UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown

  • 忽略错误
  • export PYTHONWARNINGS='ignore:semaphore_tracker:UserWarning'
  • 参考:https://blog.youkuaiyun.com/ustczhng2012/article/details/115716254
  •   	https://blog.youkuaiyun.com/bxg1065283526/article/details/108403618
    

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在Python的多进程编程中,`resource_tracker` 警告提示“`There appear to be 30 leaked objects to clean up at shutdown`”表明程序在关闭时检测到有30个资源对象(如信号量、共享内存等)未被正确释放[^1]。这种警告通常来源于 `multiprocessing` 模块中未正确清理的资源,尤其是在多卡训练或并发任务中,若程序异常退出或未正确管理资源释放,容易导致此类问题。 ### 原因分析 1. **资源未正确释放**:当程序创建了信号量、共享内存等资源后,若未显式调用 `close()` 或 `unlink()` 方法,资源将不会被自动释放,导致资源泄露。 2. **进程异常终止**:在双卡或多卡训练中,若某个进程异常终止(如使用 `kill -9`),操作系统无法在进程退出前执行清理逻辑,导致资源未释放[^2]。 3. **多进程协作问题**:多个进程共享资源时,若一个进程提前退出,而其他进程仍在使用该资源,可能导致资源无法释放,从而触发警告[^4]。 ### 解决方案 1. **显式释放资源**: - 在使用 `multiprocessing.Value`、`multiprocessing.Array` 或 `multiprocessing.shared_memory.SharedMemory` 时,确保在不再使用资源后调用 `close()` 和 `unlink()` 方法。 - 对于信号量(`multiprocessing.Semaphore`),确保在进程结束时释放所有信号量。 2. **避免使用 `kill -9`**: - 使用 `kill` 命令时,优先使用 `SIGTERM`(默认信号),它允许进程执行清理逻辑后再退出。只有在进程无响应时才使用 `SIGKILL`(即 `kill -9`)。 3. **使用上下文管理器**: - 使用 `with` 语句管理资源,如 `with multiprocessing.Pool() as pool:`,可以确保资源在使用后自动释放。 4. **设置资源清理钩子**: - 在程序中注册 `atexit` 钩子,确保即使程序异常退出,也能执行资源清理逻辑。 ```python import atexit from multiprocessing import shared_memory shm = shared_memory.SharedMemory(create=True, size=1024) def cleanup(): shm.close() shm.unlink() atexit.register(cleanup) ``` 5. **检查多进程协作逻辑**: - 确保所有进程在退出前完成资源释放,避免一个进程提前退出导致其他进程无法访问共享资源。 6. **升级Python版本**: - 某些旧版本的 Python(如 3.7)在资源管理上存在已知问题,升级到 Python 3.9 或更高版本可改善资源跟踪机制[^3]。 ### 警告的影响 虽然该警告本身不会导致程序崩溃,但长期忽略可能导致资源耗尽(如信号量或共享内存泄漏),从而影响后续程序的运行。因此,建议始终解决资源泄露问题,而不是简单忽略警告。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值