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(), 어떤 아이디어 왜) (얻을 클라이언트에 달려 ?
[this] (http://stackoverflow.com/questions/31383953/keep-request-context-in-celery-task-in-flask/31384165#31384165) 대답을 참조하십시오. – doru