如何使用Task类绑定celery应用程序?

时间:2017-05-14 04:16:32

标签: python celery celery-task

我想覆盖Celery的Task类。我可以覆盖on_success和on_failure方法,但run方法对我来说并不容易。我试图使用bind方法。我的代码如下:

start_epoch

但是当我运行代码时,我收到以下错误:

select count(uuid)
from v_xml_cdr
where start_epoch
      <= (select start_epoch as reject_start
          from v_xml_cdr
          where uuid = '5c076428-3790-11e7-868a-xxxxx'
         )
  and end_epoch
      >= (select start_epoch as reject_start
          from v_xml_cdr
          where uuid = '5c076428-3790-11e7-868a-xxxxx'
         );

我搜索了很多,但没有结果。我该如何注册任务?

1 个答案:

答案 0 :(得分:1)

显式绑定app不是必需的,因为celery任务会在调用apply_async时自动绑定到current_app。 如果您想要显式绑定,可以使用两种方法: 任务。绑定(app) 2.从app.Task创建Task类。通过继承app.Task,这个应用程序将被绑定。

您的问题与绑定无关。这是关于任务注册表。纠正如下:

from celery import Celery, Task

class MyTask(Task):
    name = 'mytask'

    def on_success(self, retval, task_id, args, kwargs):
        print("success")

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        print("failed")

    def run(self, *args, **kwargs):
        x = kwargs.get('data', None)
        print(x**2)


if __name__ == "__main__":
    app = Celery('mytask', backend='redis', broker='redis://localhost')
    MyTask.bind(app)
    app.tasks.register(MyTask)
    app.worker_main()

希望它有所帮助。