From eb09f308b9845c3175cb9d26ee7167dbbfae8eac Mon Sep 17 00:00:00 2001 From: LinJianping Date: Wed, 12 Apr 2017 16:53:34 +0800 Subject: [PATCH 1/2] SYNCHRONIZE will fall into an infinite loop SYNCHRONIZE will fall into an infinite loop --- workflow/patterns/controlflow.py | 1 + 1 file changed, 1 insertion(+) diff --git a/workflow/patterns/controlflow.py b/workflow/patterns/controlflow.py index a081aa4..c1eaf26 100644 --- a/workflow/patterns/controlflow.py +++ b/workflow/patterns/controlflow.py @@ -492,3 +492,4 @@ def __init__(self, itemq, *args, **kwargs): def run(self): call = self.itemq.get() call() + self.itemq.task_done() From 46836206b1af5487767b4674a4b1a8eb73790a03 Mon Sep 17 00:00:00 2001 From: LinJianping Date: Wed, 12 Apr 2017 20:35:19 +0800 Subject: [PATCH 2/2] lambda expression in for loop error lambda expression in for loop causes all the funcs in queue are the same --- workflow/patterns/controlflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/patterns/controlflow.py b/workflow/patterns/controlflow.py index c1eaf26..f0526ed 100644 --- a/workflow/patterns/controlflow.py +++ b/workflow/patterns/controlflow.py @@ -395,7 +395,7 @@ def _synchronize(obj, eng): new_eng.setWorkflow(func) queue.put(lambda: new_eng.process([obj])) else: - queue.put(lambda: func(obj, eng)) + queue.put(lambda func=func:func(obj, eng)) # wait on the queue until everything has been processed queue.join_with_timeout(timeout)