Я пытаюсь кэшировать большой файл ресурсов среди задач с помощью Celery 4.0.2.Ключ инициализации сельдерея
Рассматривая его в документации, у меня есть доступ к кешированию задачи.
http://docs.celeryproject.org/en/latest/userguide/tasks.html#instantiation
Это также может быть полезным для кэширования ресурсов, Например, базовый класс Task, который кэширует подключение к базе данных:
from celery import Task
class DatabaseTask(Task):
_db = None
@property
def db(self):
if self._db is None:
self._db = Database.connect()
return self._db
В моем случае я сделал некоторые изменения в кэш мой большой файловый ресурс и объект, который он разделяет между задачами, но память, используемая большим файловым ресурсом, кэшируется в задаче навсегда.
from celery import Task
class BigResourceTask(Task):
_resource = None
@property
def resource(self):
if self._resource is None:
self._resource = load_big_resource()
return self._resource
Как я могу освободить эту память или завершить ее после выполнения всех связанных задач?
Спасибо за повтор. Я пробовал это, но это создает новые ресурсы для каждого процесса. Я пытался иметь какой-то общий объект для всех процессов с одной и той же базовой задачей. – PaytoN