2014-02-13 5 views
4

특정 고객 특정 정보, 특히 request.host을 셀러리 작업에 전달하려는 멀티 테넌트 설정이 있습니다. 이상적으로는이 인터페이스를 사용할 수 있어야합니다. 전역 변수. 응용 프로그램에 투명한 방식으로이를 설정하는 방법이 있습니까?웹 요청 컨텍스트를 투명하게 샐러리 작업에 전달

작업이 같은 방식으로 호출 할 것이다

: 그것은 '요청'속성 '호스트'를 가진라는 전역 변수에 액세스 할 수 있는지를 제외하고, 작업이 같은 방식으로 정의된다

my_background_func.delay(foo, bar) 

:

@celery_app.task 
def my_background_func(foo, bar): 
    print "running the task for host:" + request.host 

감사

편집 :

,

여기

class MyTask(Task): 
    abstract = True 
    def delay(self, *args, **kwargs): 
     return self.apply_async(args, kwargs, headers={'host': request.host}) 
클라이언트

... 나는 그것을 해결하는 방법은 다음과 같습니다.

@celery_app.task(base=MyTask, bind=True) 
def hellohost(task): 
    return "hello " + task.request.headers['host'] 

작동하지만, 이상하게 hellohost.delay(), 어떤 아이디어 왜) (얻을 클라이언트에 달려 ?

+0

[this] (http://stackoverflow.com/questions/31383953/keep-request-context-in-celery-task-in-flask/31384165#31384165) 대답을 참조하십시오. – doru

답변

0

나는 원본 게시물 자체에 답변을 넣었습니다. 편집을 참조하십시오.