流式输入模式下,handler 线程阻塞在 _ChunkIter.__next__ → chunk_q.get() 等待下一个输入块时,如果 ctx 取消导致 Go 关闭连接,_ConnMux._reader 原来只往 call_q 推了 None、给 _active_tids 里的线程注入 InterruptedError, 没有处理 chunk_q。而 PyThreadState_SetAsyncExc 打断不了阻塞在 queue.Queue.get()(无 timeout)上的线程,因为它是纯 C 层等待、不会回到 字节码解释循环检查待处理异常,导致这个线程永久卡死、泄漏。 修复:连接关闭时也往 chunk_q 推一个 None 哨兵,_ChunkIter.__next__ 已经 把 None 当作流结束处理,会正常抛 StopIteration 让线程退出。 新增 pool_test.go 里的 TestStreamInputCancelDoesNotLeakThread 复现并验证 修复(通过对比 count_threads() 前后线程数)。python 包版本号同步升到 0.1.5。
13 lines
268 B
TOML
13 lines
268 B
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "gobridge"
|
|
version = "0.1.5"
|
|
description = "Python 端库,配合 Go 侧 gobridge 使用"
|
|
requires-python = ">=3.10"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["gobridge"]
|