2016-12-29 159 views
1

我试图缓存使用芹菜4.0.2任务之间的大型资源文件。芹菜任务instanciation缓存

在文档中查看,我已经达到了任务缓存部分。

http://docs.celeryproject.org/en/latest/userguide/tasks.html#instantiation

这也可能是缓存的资源是有用的,例如,缓存数据库连接的基本任务等级:

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 

如何在执行完所有相关任务后释放内存或使其过期?

回答

1

由于您在检查是否存在之后按需创建_resource,您可以随时删除它。

# complete all the tasks 
del BigResourceTask._resource # free memory 

# do something else 

r = BigResourceTask.resource # create when needed 
+0

感谢您的重播。我已经尝试过,但是这为每个进程创建了新的资源。我正在尝试为具有相同基本任务的所有进程提供某种共享对象。 – PaytoN