2016-12-29 158 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