3 pontos por merumeru 2025-09-16 | Ainda não há comentários. | Compartilhar no WhatsApp

Eu criei o pyproc para permitir que serviços em Go chamem Python como se fosse uma função local — sem CGO e sem um microsserviço separado. Ele executa um pool de processos worker em Python e se comunica por Unix Domain Sockets no mesmo host/pod, para oferecer baixa sobrecarga, isolamento de processos e paralelismo além do GIL.

Por que isso existe

  • Mantenha seu serviço em Go e reutilize Python/NumPy/pandas/PyTorch/scikit-learn.
  • Evite saltos de rede, service discovery e a carga operacional de um serviço Python separado.

Teste rápido (~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()  

Chamada a partir de 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  
}  

Escopo / limites

  • Apenas mesmo host/pod (UDS). Linux/macOS são suportados; Windows named pipes ainda não.
  • Ideal para cargas request/response de ≲ ~100 KB em JSON; orquestração de GPU e serving entre hosts estão fora do escopo.

Benchmarks (indicativos)

  • M1 local, JSON simples: ~45µs p50 e ~200 mil req/s com 8 workers. Seus números podem variar.

O que está incluído

  • Cliente em Go puro (sem CGO), biblioteca worker em Python, pool, health checks, reinícios graciosos e exemplos.

Docs & código

Licença

  • Apache-2.0. Versão atual: v0.2.x.

Feedback é bem-vindo

  • Ergonomia da API, modos de falha sob carga e prioridades para codecs/transports (por exemplo, Arrow IPC, gRPC-over-UDS).

Ainda não há comentários.

Ainda não há comentários.