4
我有一個多租戶設置,我想將某些客戶特定信息,特別是request.host傳遞給芹菜任務,理想情況下它應該在一個全局變量。有沒有辦法以對應用程序透明的方式進行設置?透明地將Web請求上下文傳遞給芹菜任務
任務將被稱爲相同的方式:
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