【问题标题】:Passing web request context transparently to a celery task将 Web 请求上下文透明地传递给 celery 任务
【发布时间】:2014-03-12 11:34:33
【问题描述】:

我有一个多租户设置,我想将某些客户特定信息,特别是 request.host 传递给 celery 任务,理想情况下它应该在全局变量中可用。有没有办法以对应用程序透明的方式进行设置?

任务将以相同的方式调用:

my_background_func.delay(foo, bar)

任务的定义方式相同,只是它可以访问一个名为“request”的全局变量,该变量具有“主机”属性:

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

【问题讨论】:

标签: flask celery celery-task flask-extensions


【解决方案1】:

我是这样解决的……

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().get() 挂在客户端上

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 2021-11-22
    • 2018-03-25
    • 2012-03-22
    • 2018-10-07
    • 2016-02-28
    • 2014-09-12
    • 2018-10-28
    • 2014-03-07
    相关资源
    最近更新 更多