diff --git a/README.md b/README.md index bc0b8aa..01ea590 100644 --- a/README.md +++ b/README.md @@ -9,54 +9,74 @@ Distributed Function Caller Framework for Python Dependencies: - websockets - fastapi -- requests - uvicorn - pydantic ## Usage: -Requires 3 scripts: Client, Broker and Runner +Requires 3 scripts: Client, Router and Runner -- Broker will mediate load balancing and connection handling, so this should start first. One port should be open. +### 1. Router -Let broker's IP be `192.168.0.110` and port be `7732` +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`. ```python -from harmoney import router as rou +from harmoney.router import startRouter -ro.startRouter("0.0.0.0", 7732) +startRouter("0.0.0.0", 7732) ``` -- Runner performs the calculations, should contain function definitions. Connects to broker using broker's IP. +### 2. Runner + +Runner exposes the function calls and contains all the heavy compute logic. Below code connects one instance of runner to the router. ```python -from harmoney import runners as run +from harmoney.runner import startRunner def customFunction(arg1: int, arg2: str) -> str: return arg2*arg1 funcs = {"custFn": customFunction} -run.startRunner(funcs, "192.168.0.110", 7732) +startRunner(funcs, "192.168.0.110", 7732) ``` -- Client is the main caller of functions. Will contain your main code. +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. ```python -from harmoney import client as cli +from harmoney.client import Client -cli.Client("192.168.0.110", 7732) +cli = Client("192.168.0.110", 7732) -retVal = cli.runSingle("custFn", arg1=10, arg2="arst") +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. \ No newline at end of file