pyproc — CGO veya mikroservisler olmadan Go'dan Python çağırın
(github.com/YuminosukeSato)Go servislerinin Python'ı yerel bir fonksiyon gibi çağırabilmesi için pyproc'u geliştirdim — CGO yok, ayrı bir mikroservis yok. Aynı host/pod üzerinde Unix Domain Sockets üzerinden haberleşen bir Python worker süreci havuzu çalıştırır; böylece düşük ek yük, süreç izolasyonu ve GIL'in ötesinde paralellik elde edersiniz.
Bu neden var
- Go servisinizi koruyup Python/NumPy/pandas/PyTorch/scikit-learn ekosistemini yeniden kullanın.
- Ayrı bir Python servisinin getirdiği ağ sıçramalarını, servis keşfini ve operasyon yükünü önleyin.
Hızlı deneme (~5 dakika)
Go (uygulama):
go get github.com/YuminosukeSato/pyproc@latest
Python (worker):
pip install pyproc-worker
Minimal worker (Python):
from pyproc_worker import expose, run_worker
@expose
def predict(req):
return {"result": req["value"] * 2}
if __name__ == "__main__":
run_worker()
Go'dan çağrı:
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
}
Kapsam / sınırlar
- Yalnızca aynı host/pod içinde çalışır (UDS). Linux/macOS desteklenir; Windows named pipes henüz yok.
- İstek/yanıt yükleri için en uygunu ≲ ~100 KB JSON'dur; GPU orkestrasyonu ve hostlar arası serving kapsam dışıdır.
Benchmark'lar (gösterge niteliğinde)
- Yerel M1, basit JSON: 8 worker ile ~45µs p50 ve ~200k req/s. Sonuçlarınız farklılık gösterebilir.
Neler dahil
- Saf Go istemcisi (CGO yok), Python worker kütüphanesi, havuz, health check'ler, kesintisiz yeniden başlatmalar ve örnekler.
Dokümanlar ve kod
- README, tasarım/operasyon/güvenlik dokümanları, pkg.go.dev: https://github.com/YuminosukeSato/pyproc
Lisans
- Apache-2.0. Güncel sürüm: v0.2.x.
Geri bildirimlere açığım
- API ergonomisi, yük altında hata durumları ve codec/transport öncelikleri (ör. Arrow IPC, gRPC-over-UDS).
Henüz yorum yok.