X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fmulticlient.py;h=ad6f357795ee447a80d725d2217f0319a40c589a;hb=4a9e6751f9f396f463932133b9d62fc925a99ef6;hp=75573ed51c5828ec1402383878b612f982b00022;hpb=cc8495078fb3e681cf38b47393255eb33b199f4c;p=sfa.git diff --git a/sfa/client/multiclient.py b/sfa/client/multiclient.py index 75573ed5..ad6f3577 100644 --- a/sfa/client/multiclient.py +++ b/sfa/client/multiclient.py @@ -1,9 +1,12 @@ + + import threading import traceback import time -from Queue import Queue +from queue import Queue from sfa.util.sfalogging import logger + def ThreadedMethod(callable, results, errors): """ A function decorator that returns a running thread. The thread @@ -11,20 +14,20 @@ def ThreadedMethod(callable, results, errors): results queue """ def wrapper(args, kwds): - class ThreadInstance(threading.Thread): + class ThreadInstance(threading.Thread): + def run(self): try: results.put(callable(*args, **kwds)) - except Exception, e: + except Exception as e: logger.log_exc('MultiClient: Error in thread: ') errors.put(traceback.format_exc()) - + thread = ThreadInstance() thread.start() return thread return wrapper - class MultiClient: """ @@ -37,7 +40,7 @@ class MultiClient: self.errors = Queue() self.threads = [] - def run (self, method, *args, **kwds): + def run(self, method, *args, **kwds): """ Execute a callable in a separate thread. """ @@ -66,11 +69,11 @@ class MultiClient: results = [] if not lenient: errors = self.get_errors() - if errors: + if errors: raise Exception(errors[0]) while not self.results.empty(): - results.append(self.results.get()) + results.append(self.results.get()) return results def get_errors(self): @@ -88,24 +91,25 @@ class MultiClient: Get the value that should be returuned to the client. If there are errors then the first error is returned. If there are no errors, then the first result is returned """ - - + + if __name__ == '__main__': def f(name, n, sleep=1): nums = [] - for i in range(n, n+5): - print "%s: %s" % (name, i) + for i in range(n, n + 5): + print("%s: %s" % (name, i)) nums.append(i) time.sleep(sleep) return nums + def e(name, n, sleep=1): nums = [] - for i in range(n, n+3) + ['n', 'b']: - print "%s: 1 + %s:" % (name, i) + for i in list(range(n, n + 3)) + ['n', 'b']: + print("%s: 1 + %s:" % (name, i)) nums.append(i + 1) time.sleep(sleep) - return nums + return nums threads = MultiClient() threads.run(f, "Thread1", 10, 2) @@ -114,7 +118,6 @@ if __name__ == '__main__': #results = threads.get_results() #errors = threads.get_errors() - #print "Results:", results - #print "Errors:", errors + # print "Results:", results + # print "Errors:", errors results_xlenient = threads.get_results(lenient=False) -