feat: 为 Python worker 输出添加行前缀,并启用无缓冲模式
- 新增 prefixWriter,对每行输出添加 [python:N] 前缀,便于与 Go 日志区分 - 注入 PYTHONUNBUFFERED=1,确保 print() 实时输出不被管道缓冲
This commit is contained in:
18
worker.go
18
worker.go
@@ -60,18 +60,20 @@ func (w *worker) start() error {
|
||||
fmt.Sprintf("GOBRIDGE_WORKER_ID=%d", w.id),
|
||||
fmt.Sprintf("GOBRIDGE_WORKER_COUNT=%d", w.cfg.workers),
|
||||
"GOBRIDGE_DEATH_FD=3", // ExtraFiles[0] → fd 3
|
||||
"PYTHONUNBUFFERED=1", // Python stdout/stderr 不缓冲,print() 立即输出
|
||||
)
|
||||
cmd.ExtraFiles = []*os.File{pr} // fd 3 in child
|
||||
if w.cfg.stdout != nil {
|
||||
cmd.Stdout = w.cfg.stdout
|
||||
} else {
|
||||
cmd.Stdout = os.Stdout
|
||||
prefix := fmt.Sprintf("[python:%d] ", w.id)
|
||||
stdout := w.cfg.stdout
|
||||
if stdout == nil {
|
||||
stdout = os.Stdout
|
||||
}
|
||||
if w.cfg.stderr != nil {
|
||||
cmd.Stderr = w.cfg.stderr
|
||||
} else {
|
||||
cmd.Stderr = os.Stderr
|
||||
stderr := w.cfg.stderr
|
||||
if stderr == nil {
|
||||
stderr = os.Stderr
|
||||
}
|
||||
cmd.Stdout = newPrefixWriter(stdout, prefix)
|
||||
cmd.Stderr = newPrefixWriter(stderr, prefix)
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
pr.Close()
|
||||
|
||||
Reference in New Issue
Block a user