From 7858178f4cf6b0d02a3a080920df0ecb7a86a193 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 7 Mar 2014 14:50:52 +0100 Subject: signals can be joined and their return fetched MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/test.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/test.py') diff --git a/src/test.py b/src/test.py index f568614..7aa5dc9 100755 --- a/src/test.py +++ b/src/test.py @@ -29,7 +29,17 @@ class signal: self.f = f def __call__(self, *args, **kwargs): - threading.Thread(target = self.f, args = args, kwargs = kwargs).start() + class signal_: + def __init__(self, f): + def f_(): + self.rc = f(*args, **kwargs) + self.rc = None + self.t = threading.Thread(target = f_) + self.t.start() + def join(self): + self.t.join() + return self.rc + return signal_(self.f) class fragment: @@ -96,7 +106,7 @@ def unordered_join(*f_groups): ready = [i for i, fs in enumerate(f_groups) if all([len(f.queue) for f in fs])] if len(ready): i = ready[random.randrange(len(ready))] - return (i, join(*(f_groups[i])) + return (i, join(*(f_groups[i]))) else: return ordered_join(*f_groups) @@ -114,6 +124,7 @@ class test: @signal def signal(f, *args): f(*args) + return 'test' @fragment def fragment(*args, **kwargs): @@ -124,7 +135,8 @@ class test: print(param, dict(jkwargs), *jargs) -test.signal(test.join, 'join') +s = test.signal(test.join, 'join') time.sleep(1) test.fragment('arg1', 'arg2', a = 'A', b = 'B') +print(s.join()) -- cgit v1.2.3-70-g09d2