harmoney 
Distributed Function Caller Framework for Python
Installation:
pip install harmoney
Dependencies:
- websockets
- fastapi
- uvicorn
- pydantic
Usage:
Requires 3 scripts: Client, Router and Runner
1. Router
The Router will mediate load balancing and connection handling between the function runners and callers, so this should start first. One port must to facilitate the communication.
This example starts the router on IP 192.168.0.110 and port 7732.
from harmoney.router import startRouter
startRouter("0.0.0.0", 7732)
2. Runner
Runner exposes the function calls and contains all the heavy compute logic. Below code connects one instance of runner to the router.
from harmoney.runner import startRunner
def customFunction(arg1: int, arg2: str) -> str:
return arg2*arg1
funcs = {"custFn": customFunction}
startRunner(funcs, "192.168.0.110", 7732)
Functions must return objects that are pickleable. None or no return statement is valid.
3. Client
Client requests the function - argument combinations to run on runners.
from harmoney.client import Client
cli = Client("192.168.0.110", 7732)
retVal = cli.runSingle("custFn", arg1=10, arg2="arst") # run only this combination
print(retVal)
cli.addCall("custFn", arg1=123, arg2="qwf") # add this combination to queue
cli.addCall("custFn", arg1=321, arg2="ars") # add this combination to queue
res = cli.runAllCalls() # send queued combs at a time.
print(res) # Print all the results
Return values from runALlCalls are in the order of their function combination in the queue.
TODO:
- Error catching, keeping the connection to the broker
- Error info should return to the client
- Remove dependency on fastapi and requests, move to completely to websockets
~ A Grammer Society Project.