Overriding the Celery Task Class
Am trying to implement a task where the global variables are shared between two different Celery tasks. For that, I have inherited task class and used property. As per celery documentation the base class will initialize when a new task is invoked. Do we have an approach where can reuse the object in between tasks? Can we override the run() method from Task? If we override the run method. How can we register the task ? with celery using Celery 5. X ? Tried Serializing object.. Any alternate approach would be appreciated.
def __init__(self): self.base_obj = "" @property def global_handler(self): return self.global_thread_handler @property def base_handler(self): return self.base_obj @app.task(base=handler) def test123(): test123.base_handler = cls1() @app.task(base=handler) def test456(): test456.base_handler.method()
Registering a task in Celery can be simply done using something like this: # my_app/tasks.py import celery
from my_app.celery import app
class MyTask(celery.Task): def run(self): [...]
MyTask = app.register_task(MyTask())
I think there's no way you can reuse the objects within tasks. Can someone correct me on this?