我想覆盖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'
);
我搜索了很多,但没有结果。我该如何注册任务?
答案 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()
希望它有所帮助。