From f419720dfba572954eb17fd6fc2af2ca9bf94040 Mon Sep 17 00:00:00 2001 From: Gordon Pendleton Date: Sat, 9 Nov 2019 22:31:35 -0500 Subject: [PATCH 1/2] fix issue #57 --- README.md | 5 +++++ jobtastic/task.py | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d57320d..4617fce 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,11 @@ These let you tweak the default behavior. Most often, you'll just be setting the `cache_duration` to enable result caching. +#### always_start_new_herd + +Skip herd avoidance check if True, but still trigger avoidance for other tasks. +Defaults to False. + #### cache_duration If you want your results cached, diff --git a/jobtastic/task.py b/jobtastic/task.py index edcb814..644edc3 100644 --- a/jobtastic/task.py +++ b/jobtastic/task.py @@ -82,6 +82,7 @@ class JobtasticTask(Task): front-end code so that users know what to expect. """ abstract = True + always_start_new_herd = False #: The shared cache used for locking and thundering herd protection _cache = None @@ -218,11 +219,12 @@ def apply_async(self, args, kwargs, **options): 'Found existing cached and completed task: %s', task_id) return self.AsyncResult(task_id) - # Check for an in-progress equivalent task to avoid duplicating work - task_id = self.cache.get('herd:%s' % cache_key) - if task_id: - logging.info('Found existing in-progress task: %s', task_id) - return self.AsyncResult(task_id) + if not self.always_start_new_herd: + # Check for an in-progress equivalent task to avoid duplicating work + task_id = self.cache.get('herd:%s' % cache_key) + if task_id: + logging.info('Found existing in-progress task: %s', task_id) + return self.AsyncResult(task_id) # It's not cached and it's not already running. Use an atomic lock to # start the task, ensuring there isn't a race condition that could From 251a8fda3ccbb3f5647634bad2fde10c1f354421 Mon Sep 17 00:00:00 2001 From: Gordon Pendleton Date: Sat, 9 Nov 2019 23:11:00 -0500 Subject: [PATCH 2/2] flake8 - fix line length --- jobtastic/task.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jobtastic/task.py b/jobtastic/task.py index 644edc3..947d41e 100644 --- a/jobtastic/task.py +++ b/jobtastic/task.py @@ -220,7 +220,8 @@ def apply_async(self, args, kwargs, **options): return self.AsyncResult(task_id) if not self.always_start_new_herd: - # Check for an in-progress equivalent task to avoid duplicating work + # Check for an in-progress equivalent task to avoid + # duplicating work task_id = self.cache.get('herd:%s' % cache_key) if task_id: logging.info('Found existing in-progress task: %s', task_id)