Python中“double free of object”错误排查:是Flask还是Python的问题?
问题分析与解答
在Mac Ventura 13.7系统上,使用Python 3.12.5运行Flask应用,频繁刷新页面模拟用户流量时,触发以下崩溃错误:
Python(34855,0x70000359d000) malloc: Double free of object 0x7fe091c4b610 Python(34855,0x70000359d000) malloc: *** set a breakpoint in malloc_error_break to debug /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/multiprocessing/resource_tracker.py:254: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown warnings.warn('resource_tracker: There appear to be %d '
问题根源判断
更可能是Python 3.12.x在macOS Ventura环境下的多进程相关内存管理bug,而非Flask框架本身的问题,理由如下:
Double free是C层面的内存错误,意味着同一块内存被释放了两次。Flask作为上层Python框架,几乎不会直接操作底层内存分配/释放逻辑,这类问题通常出现在Python解释器或其依赖的C扩展中。- 信号量泄漏警告来自Python的
multiprocessing.resource_tracker模块,说明多进程资源未被正确回收。Flask默认单进程运行,但如果开启debug模式(自动重载)或使用多进程部署,会触发multiprocessing的逻辑。不过泄漏警告本身一般不会直接导致崩溃,真正引发崩溃的是底层的double free内存错误。 - Python 3.12在macOS平台的multiprocessing模块曾被报告过资源回收相关的兼容性问题,尤其是在频繁创建、销毁子进程的场景(比如Flask debug模式下的自动重载、高频率请求触发的子进程操作)。
临时解决方案
- 关闭Flask的debug模式(设置
debug=False),避免自动重载带来的频繁子进程创建销毁。 - 降级Python版本到3.11.x,该版本在macOS上的multiprocessing模块稳定性更优。
- 检查代码中是否手动使用了multiprocessing模块,确保所有进程、信号量等资源都被正确关闭和回收。
内容的提问来源于stack exchange,提问作者Damien Boisvert
相关产品推荐
相关产品推荐

