简体   繁体   中英

In Celery+Python, how do I access to task parameters from the task_revoked function?

I'm trying to get to clean up some stuff after i kill a running task within celery. I'm currently hitting 2 problems:

1) Inside the task revoked function body, how can i get access to the parameters that the task function was called: so for example if the task is defined as:

@app.task()
def foo(bar, baz):
    pass

How will i get access to bar and baz inside the task_revoked.connect code?

2) I want to kill a task only when it's state is anything but X. That means inspecting the task on one hand, and setting the state on the other. Inspecting the state could be done I guess, but I'm having difficulty getting my head around the context inside the task function body.

If I define foo like this:

@app.task(bound=True)
def foo(self, bar, baz):
    pass

and call it from say.... Flask like foo(bar, baz) , then I'll get an error that the third parameter is expected, which means the decorator does not add any context automatically through the self parameter.

the app is simply defined as celery.Celery()

Thanks in advance

You can get tasks args from request object.

from celery.signals import task_revoked

@task_revoked.connect
def my_task_revoked_handler(sender=None, body=None, *args,  **kwargs):
    print(kwargs['request'].args)

This prints arguments given to the task.

Update:

You have to use bind not bound .

@app.task(bind=True)
def foo(self, bar, baz):

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM