3 poin oleh merumeru 2025-09-16 | Belum ada komentar. | Bagikan ke WhatsApp

Saya membuat pyproc agar layanan Go dapat memanggil Python seperti fungsi lokal — tanpa CGO dan tanpa microservice terpisah. Ia menjalankan sekumpulan proses worker Python dan berkomunikasi melalui Unix Domain Sockets pada host/pod yang sama, sehingga Anda mendapatkan overhead rendah, isolasi proses, dan paralelisme melampaui GIL.

Mengapa ini ada

  • Pertahankan layanan Go Anda, gunakan kembali Python/NumPy/pandas/PyTorch/scikit-learn.
  • Hindari network hop, service discovery, dan beban operasional dari layanan Python terpisah.

Coba cepat (~5 menit)

Go (app):

go get github.com/YuminosukeSato/pyproc@latest  

Python (worker):

pip install pyproc-worker  

Worker minimal (Python):

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

Panggil dari 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  
}  

Cakupan / batasan

  • Hanya host/pod yang sama (UDS). Linux/macOS didukung; named pipes Windows belum tersedia.
  • Paling cocok untuk payload request/response JSON ≲ ~100 KB; orkestrasi GPU dan serving lintas host berada di luar cakupan.

Benchmark (indikatif)

  • M1 lokal, JSON sederhana: ~45µs p50 dan ~200k req/s dengan 8 worker. Hasil Anda bisa berbeda.

Yang disertakan

  • Client Go murni (tanpa CGO), library worker Python, pool, health check, graceful restart, dan contoh.

Dokumentasi & kode

Lisensi

  • Apache-2.0. Rilis saat ini: v0.2.x.

Masukan diterima

  • Ergonomi API, failure mode saat beban tinggi, dan prioritas untuk codec/transport (misalnya Arrow IPC, gRPC-over-UDS).

Belum ada komentar.

Belum ada komentar.