Python 基于类的注册芹菜任务

Python 基于类的注册芹菜任务,python,python-3.x,celery,Python,Python 3.x,Celery,Python 3.x,芹菜4.x 我有一个基于类的任务 myproj/芹菜.py from celery import Celery # django settings stuff... app = Celery('myproj') app.autodiscover_tasks() import celery class EmailTask(celery.Task): def run(self, *args, **kwargs): self.do_somethin

Python 3.x,芹菜4.x

我有一个基于类的任务

myproj/芹菜.py

from celery import Celery

# django settings stuff...

app = Celery('myproj')
app.autodiscover_tasks()
import celery

class EmailTask(celery.Task):
    def run(self, *args, **kwargs):
        self.do_something()
from myproj.celery import app
email_task = app.tasks[EmailTask.name]
@app.task
def email_task():
    """
    Wrapper to call class based task
    """
    task = EmailTask()
    # task.delay()  # Won't work!!!
    task.run()
app1/tasks.py

from celery import Celery

# django settings stuff...

app = Celery('myproj')
app.autodiscover_tasks()
import celery

class EmailTask(celery.Task):
    def run(self, *args, **kwargs):
        self.do_something()
from myproj.celery import app
email_task = app.tasks[EmailTask.name]
@app.task
def email_task():
    """
    Wrapper to call class based task
    """
    task = EmailTask()
    # task.delay()  # Won't work!!!
    task.run()
如果我这样做:

$ celery worker -A myproj -l info
[tasks]
  . app2.tasks.debug_task
  . app2.tasks.test
因此,芹菜装饰器用于注册任务,但基于类的任务未注册

如何注册基于类的任务? 更新1:

如果我将以下行添加到
app1/tasks.py

from celery import Celery

# django settings stuff...

app = Celery('myproj')
app.autodiscover_tasks()
import celery

class EmailTask(celery.Task):
    def run(self, *args, **kwargs):
        self.do_something()
from myproj.celery import app
email_task = app.tasks[EmailTask.name]
@app.task
def email_task():
    """
    Wrapper to call class based task
    """
    task = EmailTask()
    # task.delay()  # Won't work!!!
    task.run()

$。/manage.py shell
>从app1.tasks导入EmailTask
>task1=EmailTask()
>任务1.运行()
>task2=EmailTask()
>任务2.延迟()#否
#在工人身上。。。
[2017-01-22 08:07:28120:INFO/PoolWorker-1]Task app1.tasks.email_Task[41e5bc7d-058a-400e-9f73-c853c0f60a2a]在0.0701281649817247s中成功:无
[2017-01-22 08:10:31909:ERROR/MainProcess]接收到类型为None的未注册任务。
该消息已被忽略和丢弃。

您可以找到完整的描述,但对我来说,这就足够添加了

from myapp.celery import app
app.tasks.register(MyTaskTask())

对于
celery==4.2.1
我必须使用
celery的返回值。注册\u task()
作为任务实例来调用
delay()

# my_app/tasks.py
import celery

from my_app.celery import app

class MyTask(celery.Task):
    def run(self):
        [...]

MyTask = app.register_task(MyTask())
然后使用它:

# my_app/app.py
from my_app.tasks import MyTask

[...]

MyTask.delay()
该解决方案在a和is中描述

嗯,,
dtk

您好,您可以在这里找到您的解决方案