10👍
Celery does set some default keyword arguments if the task accepts them.
(you can accept them by either using **kwargs, or list them specifically)
@task
def do_job(path, task_id=None):
cache.set(task_id, operation_results)
The list of default keyword arguments is documented here:
http://ask.github.com/celery/userguide/tasks.html#default-keyword-arguments
140👍
UPDATE: use Balthazar’s answer for Celery 3.1+
@task(bind=True)
def do_job(self, path):
cache.set(self.request.id, operation_results)
Feel free to upvote his answer.
Old answer:
Since Celery 2.2.0, information related to the currently executed task is saved to task.request
(it’s called «the context»). So you should get task id from this context (not from keyword arguments, which are deprecated):
@task
def do_job(path):
cache.set(do_job.request.id, operation_results)
The list of all available fields is documented here:
http://celery.readthedocs.org/en/latest/userguide/tasks.html?highlight=requestcontext#context
- [Django]-How do I install an old version of Django on virtualenv?
- [Django]-What is reverse()?
- [Django]-Django – what is the difference between render(), render_to_response() and direct_to_template()?
91👍
As of celery 3.1, you can use the bind
decorator argument, and have access to the current request:
@task(bind=True)
def do_job(self, path):
cache.set(self.request.id, operation_results)
- [Django]-How do I filter query objects by date range in Django?
- [Django]-How to Unit test with different settings in Django?
- [Django]-How to reset Django admin password?