3 điểm bởi merumeru 2025-09-16 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Tôi đã tạo ra pyproc để các dịch vụ Go có thể gọi Python như một hàm cục bộ — không cần CGO và không cần microservice riêng. Nó chạy một nhóm tiến trình worker Python và giao tiếp qua Unix Domain Sockets trên cùng host/pod, nhờ đó có chi phí thấp, cách ly tiến trình và khả năng xử lý song song vượt ra ngoài GIL.

Vì sao dự án này tồn tại

  • Giữ nguyên dịch vụ Go của bạn, đồng thời tái sử dụng Python/NumPy/pandas/PyTorch/scikit-learn.
  • Tránh các bước nhảy mạng, service discovery và gánh nặng vận hành của một dịch vụ Python riêng biệt.

Dùng thử nhanh (~5 phút)

Go (ứng dụng):

go get github.com/YuminosukeSato/pyproc@latest  

Python (worker):

pip install pyproc-worker  

Worker tối giản (Python):

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

Gọi từ 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  
}  

Phạm vi / giới hạn

  • Chỉ hỗ trợ cùng host/pod (UDS). Hỗ trợ Linux/macOS; chưa hỗ trợ named pipes trên Windows.
  • Phù hợp nhất cho payload request/response JSON cỡ ≲ ~100 KB; điều phối GPU và phục vụ đa host nằm ngoài phạm vi.

Benchmark (mang tính tham khảo)

  • Trên máy M1 cục bộ, JSON đơn giản: ~45µs p50~200k req/s với 8 worker. Kết quả thực tế có thể khác.

Bao gồm những gì

  • Client thuần Go (không CGO), thư viện worker Python, pool, health check, graceful restart và các ví dụ.

Tài liệu & mã nguồn

Giấy phép

  • Apache-2.0. Bản phát hành hiện tại: v0.2.x.

Mong nhận phản hồi

  • Trải nghiệm API, các chế độ lỗi khi chịu tải và mức độ ưu tiên cho codec/transport (ví dụ: Arrow IPC, gRPC-over-UDS).

Chưa có bình luận nào.

Chưa có bình luận nào.