diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-09-16 13:30:45 +0100 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-09-16 13:30:45 +0100 |
| commit | a37885041b442b381ae58a9322b8bc8256992b7a (patch) | |
| tree | 38719ce7d8b3a35bc9b442de8fd15891f4c8f807 | |
| parent | Bump version (diff) | |
| download | AnnotateChange-a37885041b442b381ae58a9322b8bc8256992b7a.tar.gz AnnotateChange-a37885041b442b381ae58a9322b8bc8256992b7a.zip | |
Add a lock to the task assignment
While it shouldn't take very long, this should nonetheless
avoid race conditions on the task assignment logic. Following
the discussion here: https://stackoverflow.com/q/18213619
| -rw-r--r-- | app/utils/tasks.py | 13 | ||||
| -rw-r--r-- | boot.sh | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/app/utils/tasks.py b/app/utils/tasks.py index b0f5c27..8356876 100644 --- a/app/utils/tasks.py +++ b/app/utils/tasks.py @@ -5,13 +5,26 @@ """ import random +import multiprocessing from flask import current_app from app.models import Dataset, Task +TASK_LOCK = multiprocessing.Lock() + def generate_user_task(user): + task = None + TASK_LOCK.acquire(timeout=10) + try: + task = realgenerate_user_task(user) + finally: + TASK_LOCK.release() + return task + + +def realgenerate_user_task(user): """ Generate new task for a given user. @@ -13,4 +13,4 @@ while true; do sleep 5 done -exec gunicorn -b :7831 --access-logfile - --error-logfile - annotate_change:app +exec gunicorn -b :7831 --preload --access-logfile - --error-logfile - annotate_change:app |
