1👍
This is a good example for using Celery’s callback/linking function.
Celery supports linking tasks together so that one task follows another.
You can read more about it here
apply_async()
functions has two optional arguments
+link : excute the linked function on success
+link_error : excute the linked function on an error
@task
def add(a, b):
return a + b
@task
def total(numbers):
return sum(numbers)
@task
def error_handler(uuid):
result = AsyncResult(uuid)
exc = result.get(propagate=False)
print('Task %r raised exception: %r\n%r' % (exc, result.traceback))
Now in your calling function do something like
def main():
#for error_handling
add.apply_async((2, 2), link_error=error_handler.subtask())
#for linking 2 tasks
add.apply_async((2, 2), link=add.subtask((8, )))
# output 12
#what you can do is your case is something like this.
if user_requires:
add.apply_async((2, 2), link=add.subtask((8, )))
else:
add.apply_async((2, 2))
Hope this is helpful
Source:stackexchange.com