vrt*_*234 6 celery flask celery-task flask-extensions
我有一个多租户设置,我想将某些客户特定信息,特别是request.host传递给芹菜任务,理想情况下,它应该在全局变量中可用.有没有办法以对应用程序透明的方式设置它?
任务将以相同的方式调用:
my_background_func.delay(foo, bar)
Run Code Online (Sandbox Code Playgroud)
任务的定义方式相同,只是它可以访问名为'request'的全局变量,该变量具有属性'host':
@celery_app.task
def my_background_func(foo, bar):
print "running the task for host:" + request.host
Run Code Online (Sandbox Code Playgroud)
这就是我解决问题的方法...
class MyTask(Task):
abstract = True
def delay(self, *args, **kwargs):
return self.apply_async(args, kwargs, headers={'host': request.host})
Run Code Online (Sandbox Code Playgroud)
在客户端:
@celery_app.task(base=MyTask, bind=True)
def hellohost(task):
return "hello " + task.request.headers['host']
Run Code Online (Sandbox Code Playgroud)
它有效,但奇怪的是 hellohost.delay().get() 挂在客户端上
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |