diff options
| author | Mattias Andrée <maandree@operamail.com> | 2014-03-07 14:50:52 +0100 |
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2014-03-07 14:50:52 +0100 |
| commit | 7858178f4cf6b0d02a3a080920df0ecb7a86a193 (patch) | |
| tree | f8bfbae52d36539d225ad80eb9fccaa39c522c9b | |
| parent | add unordered join (diff) | |
| download | join-python-7858178f4cf6b0d02a3a080920df0ecb7a86a193.tar.gz join-python-7858178f4cf6b0d02a3a080920df0ecb7a86a193.tar.bz2 join-python-7858178f4cf6b0d02a3a080920df0ecb7a86a193.tar.xz | |
signals can be joined and their return fetched
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
| -rw-r--r-- | README | 7 | ||||
| -rwxr-xr-x | src/test.py | 18 |
2 files changed, 22 insertions, 3 deletions
@@ -2,3 +2,10 @@ Join-calculus for Python Status: experimenting +Extensions to join-calculus: + + concurrently(f...) runs a set of functions concurrently and joins with all of them + + signals have join() which joins with the signal and returns its return + (signals do not need to be void) + 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()) |
