2013-06-11 3 views
3

한 작업만으로도 몇 분 동안 매우 바쁠 수 있다고합니다.셀러리 단일 작업 영구 데이터

작업 결과를 얻고 결과에 따라 작업자가 다시 같은 작업을 수행하게하고 싶습니다.

내가 대답을 찾을 수없는 질문은 다음과 같습니다. 작업자 컴퓨터의 메모리에 데이터를 보관하여 다음 작업에서 사용할 수 있습니까?

답변

4

가능합니다. 문서 (http://docs.celeryproject.org/en/latest/userguide/tasks.html#instantiation)는 다소 모호하며 이것이 최선의 방법인지 잘 모르겠지만 다음과 같이 할 수 있습니다.

이것은 원하는 작업이지만 작동하지 않습니다.

from celery import Task, registry 
@celery.task 
class MyTask(Task): 
    def __init__(self): 
     self.a = 0 

    def run(self, x): 
     self.a += x 
     return self.a 
mytask = registry.tasks[MyTask.name] 

워드 프로세서에 따르면 :

태스크가 instantiat하지

# This doesn't work 
a = 0 
@celery.task 
def mytask(x): 
    a += x 
    return a 

이 작동하는 방법이다 모든 요청에 ​​대해 ed가 작성되지만 글로벌 인스턴스로서 타스크 레지스트리에 등록됩니다. 즉, __init__ 생성자는 프로세스 당 한 번만 호출되며 작업 클래스는 의미 론적으로 액터에 더 가깝습니다. ... 작업이있는 경우 ... 모든 요청을 동일한 프로세스로 라우팅하면 요청간에 상태가 유지됩니다. "

나는 이것으로 성공했지만 잘 모르겠습니다. 더 좋은 방법이 있다면