pyproc — CGO या microservices के बिना Go से Python कॉल करें
(github.com/YuminosukeSato)मैंने pyproc बनाया ताकि Go services, Python को किसी local function की तरह कॉल कर सकें — न CGO और न ही अलग microservice। यह Python worker processes का एक pool चलाता है और उसी host/pod पर Unix Domain Sockets के ज़रिये बात करता है, जिससे कम overhead, process isolation, और GIL से आगे parallelism मिलता है।
यह क्यों मौजूद है
- अपनी Go service बनाए रखें, और Python/NumPy/pandas/PyTorch/scikit-learn को फिर से इस्तेमाल करें।
- अलग Python service के network hops, service discovery, और ops burden से बचें।
जल्दी आज़माएँ (~5 मिनट)
Go (app):
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 से कॉल करें:
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
}
दायरा / सीमाएँ
- केवल same-host/pod (UDS)। Linux/macOS समर्थित हैं; Windows named pipes अभी नहीं।
- request/response payloads ≲ ~100 KB JSON के लिए सबसे उपयुक्त; GPU orchestration और cross-host serving इसके दायरे में नहीं हैं।
Benchmarks (संकेतात्मक)
- Local M1, simple JSON: 8 workers के साथ ~45µs p50 और ~200k req/s। आपके परिणाम अलग हो सकते हैं।
क्या शामिल है
- Pure Go client (no CGO), Python worker lib, pool, health checks, graceful restarts, और examples।
Docs & code
- README, design/ops/security docs, pkg.go.dev: https://github.com/YuminosukeSato/pyproc
License
- Apache-2.0. मौजूदा release: v0.2.x.
फ़ीडबैक का स्वागत है
- API ergonomics, load के दौरान failure modes, और codecs/transports (जैसे, Arrow IPC, gRPC-over-UDS) के लिए प्राथमिकताएँ।
अभी कोई टिप्पणी नहीं है.