diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2008-01-13 15:10:48 -0500 |
---|---|---|
committer | Michael DeHaan <mdehaan@redhat.com> | 2008-01-13 15:10:48 -0500 |
commit | e87e62d301dbd8fe99ac74be7a38009b2e3748cb (patch) | |
tree | bd125c5daac096a7887ab0a12a6a9ea4633a40ca /func/overlord/client.py | |
parent | 8c4a154f196383f6d0969934e10641e83ac51af4 (diff) | |
download | third_party-func-e87e62d301dbd8fe99ac74be7a38009b2e3748cb.tar.gz third_party-func-e87e62d301dbd8fe99ac74be7a38009b2e3748cb.tar.xz third_party-func-e87e62d301dbd8fe99ac74be7a38009b2e3748cb.zip |
Add jobthing, which is our async job engine. It's still in progress
and very much a prototype that isn't expected to work yet, but you get
the idea.
Diffstat (limited to 'func/overlord/client.py')
-rwxr-xr-x | func/overlord/client.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/func/overlord/client.py b/func/overlord/client.py index c6d8ab6..5eb6ef0 100755 --- a/func/overlord/client.py +++ b/func/overlord/client.py @@ -27,6 +27,7 @@ import sslclient import command import forkbomb +import jobthing # =================================== # defaults @@ -114,7 +115,7 @@ def isServer(server_string): class Client(object): def __init__(self, server_spec, port=DEFAULT_PORT, interactive=False, - verbose=False, noglobs=False, nforks=1, config=None): + verbose=False, noglobs=False, nforks=1, async=False, config=None): """ Constructor. @server_spec -- something like "*.example.org" or "foosball" @@ -134,6 +135,7 @@ class Client(object): self.interactive = interactive self.noglobs = noglobs self.nforks = nforks + self.async = async self.servers = expand_servers(self.server_spec, port=self.port, noglobs=self.noglobs,verbose=self.verbose) @@ -163,6 +165,14 @@ class Client(object): # ----------------------------------------------- + def job_status(self, jobid): + """ + Use this to acquire status from jobs when using run with async client handles + """ + return jobthing.job_status(jobid) + + # ----------------------------------------------- + def run(self, module, method, args, nforks=1): """ Invoke a remote method on one or more servers. @@ -174,8 +184,6 @@ class Client(object): just a single value, not a hash. """ - - results = {} def process_server(bucketnumber, buckets, server): @@ -210,14 +218,15 @@ class Client(object): left = server.rfind("/")+1 right = server.rfind(":") server_name = server[left:right] - # TEST (changed for integration with forkbomb) - # results[server_name] = retval return (server_name, retval) if not self.noglobs: - if self.nforks > 1: + if self.nforks > 1 or self.async: # using forkbomb module to distribute job over multiple threads - results = forkbomb.batch_run(self.servers, process_server,nforks) + if not self.async: + results = forkbomb.batch_run(self.servers, process_server, nforks) + else: + results = jobthing.batch_run(self.servers, process_server, nforks) else: # no need to go through the fork code, we can do this directly results = {} |