3 Punkte von merumeru 2025-09-16 | Noch keine Kommentare. | Auf WhatsApp teilen

Ich habe pyproc entwickelt, damit Go-Services Python wie eine lokale Funktion aufrufen können — ohne CGO und ohne separaten Microservice. Es betreibt einen Pool von Python-Worker-Prozessen und kommuniziert über Unix-Domain-Sockets auf demselben Host/Pod. So erhält man geringen Overhead, Prozessisolierung und Parallelität jenseits der GIL.

Warum es das gibt

  • Behalte deinen Go-Service und nutze trotzdem Python/NumPy/pandas/PyTorch/scikit-learn weiter.
  • Vermeide Netzwerksprünge, Service Discovery und den operativen Aufwand eines separaten Python-Services.

Schnell ausprobieren (ca. 5 Minuten)

Go (App):

go get github.com/YuminosukeSato/pyproc@latest  

Python (Worker):

pip install pyproc-worker  

Minimaler Worker (Python):

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

Aufruf aus 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  
}  

Umfang / Grenzen

  • Nur gleicher Host/Pod (UDS). Linux/macOS werden unterstützt; Windows Named Pipes noch nicht.
  • Am besten geeignet für Request/Response-Payloads bis etwa ≲ ~100 KB JSON; GPU-Orchestrierung und Serving über Host-Grenzen hinweg sind nicht vorgesehen.

Benchmarks (zur Orientierung)

  • Lokal auf einem M1, einfaches JSON: ~45µs p50 und ~200k Req/s mit 8 Workern. Deine Werte können abweichen.

Was enthalten ist

  • Reiner Go-Client (ohne CGO), Python-Worker-Bibliothek, Pool, Health Checks, Graceful Restarts und Beispiele.

Doku & Code

Lizenz

  • Apache-2.0. Aktuelle Version: v0.2.x.

Feedback willkommen

  • API-Ergonomie, Fehlermodi unter Last und Prioritäten für Codecs/Transporte (z. B. Arrow IPC, gRPC-over-UDS).

Noch keine Kommentare.

Noch keine Kommentare.