aboutsummaryrefslogtreecommitdiffstats
path: root/src/test.py
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-03-07 14:50:52 +0100
committerMattias Andrée <maandree@operamail.com>2014-03-07 14:50:52 +0100
commit7858178f4cf6b0d02a3a080920df0ecb7a86a193 (patch)
treef8bfbae52d36539d225ad80eb9fccaa39c522c9b /src/test.py
parentadd unordered join (diff)
downloadjoin-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 'src/test.py')
-rwxr-xr-xsrc/test.py18
1 files changed, 15 insertions, 3 deletions
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())