3 puntos por merumeru 2025-09-16 | Aún no hay comentarios. | Compartir por WhatsApp

Construí pyproc para permitir que los servicios en Go llamen a Python como si fuera una función local: sin CGO y sin un microservicio separado. Ejecuta un pool de procesos worker de Python y se comunica por Unix Domain Sockets en el mismo host/pod, así que obtienes baja sobrecarga, aislamiento por proceso y paralelismo más allá del GIL.

Por qué existe

  • Mantén tu servicio en Go y reutiliza Python/NumPy/pandas/PyTorch/scikit-learn.
  • Evita saltos de red, service discovery y la carga operativa de un servicio de Python separado.

Prueba rápida (~5 minutos)

Go (app):

go get github.com/YuminosukeSato/pyproc@latest  

Python (worker):

pip install pyproc-worker  

Worker mínimo (Python):

from pyproc_worker import expose, run_worker  
@expose  
def predict(req):  
    return {"result": req["value"] * 2}  
if __name__ == "__main__":  
    run_worker()  

Llamada desde Go:

import (  
  "context"  
  "fmt"  
  "github.com/YuminosukeSato/pyproc/pkg/pyproc"  
)  
func main() {  
  pool, _ := pyproc.NewPool(pyproc.PoolOptions{  
    Config:       pyproc.PoolConfig{Workers: 4, MaxInFlight: 10},  
    WorkerConfig: pyproc.WorkerConfig{SocketPath: "/tmp/pyproc.sock", PythonExec: "python3", WorkerScript: "worker.py"},  
  }, nil)  
  _ = pool.Start(context.Background())  
  defer pool.Shutdown(context.Background())  
  var out map[string]any  
  _ = pool.Call(context.Background(), "predict", map[string]any{"value": 42}, &out)  
  fmt.Println(out["result"]) // 84  
}  

Alcance / límites

  • Solo para el mismo host/pod (UDS). Compatible con Linux/macOS; Windows con named pipes todavía no.
  • Ideal para payloads de request/response de ≲ ~100 KB JSON; la orquestación de GPU y el serving entre hosts quedan fuera del alcance.

Benchmarks (orientativos)

  • M1 local, JSON simple: ~45µs p50 y ~200k req/s con 8 workers. Tus resultados pueden variar.

Qué incluye

  • Cliente puro en Go (sin CGO), librería de workers en Python, pool, health checks, reinicios elegantes y ejemplos.

Docs y código

Licencia

  • Apache-2.0. Versión actual: v0.2.x.

Se agradece feedback

  • Ergonomía de la API, modos de falla bajo carga y prioridades para codecs/transports (p. ej., Arrow IPC, gRPC-over-UDS).

Aún no hay comentarios.

Aún no hay comentarios.