2014-02-13 65 views
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()得到()掛在客戶端上,任何想法,爲什麼?

+0

請參閱[this](http://stackoverflow.com/questions/31383953/keep-request-context-in-celery-task-in-flask/31384165#31384165)回答。 – doru

回答

0

我已經在原來的帖子本身的答案。請參閱編輯。