aboutsummaryrefslogtreecommitdiff
path: root/gn3/commands.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-05-16 12:59:27 +0300
committerFrederick Muriuki Muriithi2022-05-16 12:59:27 +0300
commit0b161341083fdaad9bd187ea74bf4e8b9631eef4 (patch)
tree76580a8d32d80c499747b4434ea55afda6c1963d /gn3/commands.py
parenta657b502e6ed46ea0887b5febb89a7408f163820 (diff)
downloadgenenetwork3-0b161341083fdaad9bd187ea74bf4e8b9631eef4.tar.gz
Run computation in one-shot asynchronous process
After reworking the worker/runner to have a one-shot mode, add a function that queues up the task and then runs the worker in the one-shot mode to process the computation in the background.
Diffstat (limited to 'gn3/commands.py')
-rw-r--r--gn3/commands.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/gn3/commands.py b/gn3/commands.py
index e622068..5770902 100644
--- a/gn3/commands.py
+++ b/gn3/commands.py
@@ -93,7 +93,6 @@ Returns the name of the specific redis hash for the specific task.
conn.hset(name=unique_id, key="env", value=json.dumps(env))
return unique_id
-
def run_cmd(cmd: str, success_codes: Tuple = (0,), env: str = None) -> Dict:
"""Run CMD and return the CMD's status code and output as a dict"""
parsed_cmd = json.loads(cmd)
@@ -105,3 +104,12 @@ def run_cmd(cmd: str, success_codes: Tuple = (0,), env: str = None) -> Dict:
if results.returncode not in success_codes: # Error!
out = str(results.stderr, 'utf-8')
return {"code": results.returncode, "output": out}
+
+def run_async_cmd(
+ conn: Redis, job_queue: str, cmd: Union[str, Sequence[str]],
+ email: Optional[str] = None, env: Optional[dict] = None) -> str:
+ """A utility function to call `gn3.commands.queue_cmd` function and run the
+ worker in the `one-shot` mode."""
+ cmd_id = queue_cmd(conn, job_queue, cmd, email, env)
+ subprocess.Popen(["python3", "sheepdog/worker.py"])
+ return cmd_id