3 puan yazan merumeru 2025-09-16 | Henüz yorum yok. | WhatsApp'ta paylaş

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

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.

Henüz yorum yok.