Metadata-Version: 2.1
Name: socket_rpc
Version: 0.4.2
Summary: Microlib for socket RPC
Author-email: Hristo Vrigazov <hvrigazov@gmail.com>
Project-URL: Homepage, https://github.com/microlib-org/utils_microlibs
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: tqdm; extra == "dev"

# socket_rpc

`socket_rpc` is a very simple microlib for remote procedure calls (RPC) over sockets in Python. 

It exposes two class: 
- `RPCServer` - acts as a server for a Python RPC
- `RPCClient` - allows you to call a function, registered on another host with the `rpc` decorator.

Install with:

```bash
pip install socket_rpc
```

It has no external dependencies and is less than 100 lines of code.

It doesn't fork the process and guarantees you that the calls to a server will be processed in the 
same order in which they were done.

## Quick server example

To expose a function over TCP, just decorate it with the `rpc` decorator:

```python
import logging
import sys

import numpy as np

from socket_rpc import RPCServer


logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

def callback0(np_arr: np.ndarray):
    print('0', np_arr.shape)
    

def callback1(np_arr: np.ndarray):
    print('1', np_arr.shape)

server = RPCServer(host='localhost', port=61000, buffer_size=1 * 1024 * 1024)
server.add_fn(callback0)
server.add_fn(callback1)
server.serve()

```

## Quick call example

To call a function already exposed with the `rpc` decorator, just use the `rpc_call` function:

```python
import numpy as np
from socket_rpc import RPCClient

client = RPCClient('127.0.0.1', 5555)
client.callback0(np.arange(100))
client.callback1(np.arange(10))
```
