Python worker for pyproc - Call Python from Go without CGO
Project description
pyproc-worker
Python worker implementation for pyproc - Call Python from Go without CGO or microservices.
Installation
pip install pyproc-worker
Quick Start
Create a Python worker with your functions:
from pyproc_worker import expose, run_worker
@expose
def predict(req):
"""Your ML model or Python logic here"""
return {"result": req["value"] * 2}
@expose
def process_data(req):
"""Process data with Python libraries"""
import pandas as pd
df = pd.DataFrame(req["data"])
return df.describe().to_dict()
if __name__ == "__main__":
run_worker()
Then call it from Go using pyproc:
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(ctx)
defer pool.Shutdown(ctx)
// Call Python function
input := map[string]interface{}{"value": 42}
var output map[string]interface{}
pool.Call(ctx, "predict", input, &output)
Features
- Simple decorator-based API - Just use
@exposeto make functions callable - Automatic serialization - Handles JSON serialization/deserialization
- Built-in health checks - Health endpoint automatically exposed
- Graceful shutdown - Proper cleanup on exit
- Logging support - Structured logging with configurable levels
API Reference
@expose Decorator
Makes a Python function callable from Go:
@expose
def my_function(req):
# req is a dict containing the request data
# Return a dict that will be sent back to Go
return {"result": "success"}
run_worker(socket_path=None)
Starts the worker and listens for requests:
if __name__ == "__main__":
# Socket path from environment or command line
run_worker()
# Or specify explicitly
run_worker("/tmp/my-worker.sock")
Environment Variables
PYPROC_SOCKET_PATH- Unix domain socket pathPYPROC_LOG_LEVEL- Logging level (debug, info, warning, error)
Examples
Machine Learning Model
import pickle
from pyproc_worker import expose, run_worker
# Load model at startup
with open("model.pkl", "rb") as f:
model = pickle.load(f)
@expose
def predict(req):
features = req["features"]
prediction = model.predict([features])[0]
return {
"prediction": int(prediction),
"confidence": float(model.predict_proba([features])[0].max())
}
if __name__ == "__main__":
run_worker()
Data Processing
import pandas as pd
from pyproc_worker import expose, run_worker
@expose
def analyze_csv(req):
df = pd.DataFrame(req["data"])
return {
"mean": df.mean().to_dict(),
"std": df.std().to_dict(),
"correlation": df.corr().to_dict()
}
if __name__ == "__main__":
run_worker()
Async Operations
import asyncio
from pyproc_worker import expose, run_worker
@expose
async def fetch_data(req):
url = req["url"]
# Async operations work automatically
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
data = await response.json()
return {"data": data}
if __name__ == "__main__":
run_worker()
Development
Running Tests
# Install dev dependencies
pip install -e .[dev]
# Run tests
pytest
Building from Source
git clone https://github.com/YuminosukeSato/pyproc
cd pyproc/worker/python
pip install -e .
License
Apache 2.0 - See LICENSE for details.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyproc_worker-0.1.0.tar.gz.
File metadata
- Download URL: pyproc_worker-0.1.0.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
467d548e295889fbd1bad251f0008c55b2f796c05d7fe195a2f516588b0091ec
|
|
| MD5 |
abd0b36507747f93bd0c13e0020e788a
|
|
| BLAKE2b-256 |
396eaf018d504d52451a7fa141fd400637b03d6b010b11f4c2df185e469d5ac9
|
File details
Details for the file pyproc_worker-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pyproc_worker-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86e0e90f1d7469f0fbd7cce3f593d93ce3fb0b3135585ee25c7e17a178430e38
|
|
| MD5 |
f0d3efbd7fe0172726cf2d469b21e17a
|
|
| BLAKE2b-256 |
9ce89a6b9c32215a5dfee01174ddf02ac83ef0b40b0b30a562e744a892165310
|