what
|
4f74627be1
|
fix: 修复流式输入 ctx 取消时 handler 线程永久阻塞泄漏的问题
流式输入模式下,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。
|
2026-07-23 14:07:47 +08:00 |
|
what
|
db71a904e0
|
feat: 添加全局错误日志捕获
- Python 侧 _dispatch 异常时输出完整堆栈到 stderr
- Go 侧 handler 返回 error 时打印日志
- 升级 Python 包版本至 0.1.4
|
2026-05-20 19:30:52 +08:00 |
|
what
|
16261a8c8f
|
chore: 升级 Python 包版本至 0.1.3
|
2026-05-19 20:09:18 +08:00 |
|
what
|
39517dc5fc
|
feat: 通过匿名管道实现父进程死亡检测,替代轮询方案
- worker.go: 为每个子进程创建 death pipe,Go 持有写端
- __init__.py: run() 中监听管道读端 EOF,Go 退出时立即终止子进程
- 解决 Ctrl+C / panic / SIGKILL 等场景下 Python worker 变成孤儿进程的问题
- Python 包版本升至 0.1.2
|
2026-04-14 13:49:33 +08:00 |
|
what
|
b390effd8e
|
feat: 添加 Python→Go 全双工回调支持(call_go)
- 新增 WithHandlers 选项,通过反射将 Go 结构体方法暴露给 Python
- 新增 callback/callback_result 消息类型,支持 Python 在处理中回调 Go
- client 侧新增 readResult,内联处理 callback,复用同一连接避免死锁
- Python 侧新增 call_go[T]() 泛型调用,支持 dataclass 自动构造
- 注入 GOBRIDGE_WORKER_ID/WORKER_COUNT 环境变量,支持多 worker 初始化分工
- 新增示例演示 Go→Python→Go→Python 四层全双工链路
- Python 包版本升至 0.1.1
|
2026-04-14 13:06:50 +08:00 |
|
what
|
07e9239ac5
|
refactor: 将装饰器 gobridge 重命名为 expose,并添加 pyproject.toml
|
2026-04-13 17:13:54 +08:00 |
|