Python 与Django+;芹菜

Python 与Django+;芹菜,python,django,task,celery,Python,Django,Task,Celery,我试图在我的项目中做一个周期性的任务,但我不能让它工作。在我的开发中,我执行芹菜如下: python manage.py celery worker -l info from celery.task import PeriodicTask TaskToBePeriodical(PeriodicTask): run_every = crontab() # This should make it execute every minute, just for test def r

我试图在我的项目中做一个周期性的任务,但我不能让它工作。在我的开发中,我执行芹菜如下:

python manage.py celery worker -l info
from celery.task import PeriodicTask

TaskToBePeriodical(PeriodicTask):
    run_every = crontab()  # This should make it execute every minute, just for test
    def run(self, **kwargs):
        # Do something awesome...
但当我尝试时:

celery -B -l info

我收到一个
连接被拒绝错误
。 我还安装了监视任务是否执行的功能。我还有代码中的其他任务要执行,但现在我想做一个定期任务

我的任务(实际有效)继承自
芹菜.task.task
,而我想定期执行的任务则继承自
芹菜.task.PeriodicTask
,如下所示:

python manage.py celery worker -l info
from celery.task import PeriodicTask

TaskToBePeriodical(PeriodicTask):
    run_every = crontab()  # This should make it execute every minute, just for test
    def run(self, **kwargs):
        # Do something awesome...

您启动芹菜的命令似乎不太正确。
根据您试图安排的内容,您可能希望尝试将其设置为芹菜.beat

值得注意的是,这种方法不使用django芹菜,因为芹菜文档提到,“不再需要这个项目”

有关芹菜的更多信息,请参见此处。节拍:

芹菜启动命令

celery -A proj.celery_app worker -l info -B
项目目录

+-- proj
|   +-- celery_app.py
|   +-- settings.py
|   +-- urls.py
|   +-- ...
+-- app
|   +-- models.py
|   +-- tasks.py
|   +-- urls.py
|   +-- views.py
|   +-- ...
芹菜应用程序py

from __future__ import absolute_import

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

from django.conf import settings

app = Celery('proj')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))
CELERYBEAT_SCHEDULE = {
    'name_of_task': {
        'task': 'app.tasks.periodic_task',
        'schedule': crontab()
    }
}
from __future__ import absolute_import
from celery import shared_task

@shared_task
def periodic_task():
    # Do your awesome thing
    return
设置.py

from __future__ import absolute_import

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

from django.conf import settings

app = Celery('proj')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))
CELERYBEAT_SCHEDULE = {
    'name_of_task': {
        'task': 'app.tasks.periodic_task',
        'schedule': crontab()
    }
}
from __future__ import absolute_import
from celery import shared_task

@shared_task
def periodic_task():
    # Do your awesome thing
    return
任务。py

from __future__ import absolute_import

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

from django.conf import settings

app = Celery('proj')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))
CELERYBEAT_SCHEDULE = {
    'name_of_task': {
        'task': 'app.tasks.periodic_task',
        'schedule': crontab()
    }
}
from __future__ import absolute_import
from celery import shared_task

@shared_task
def periodic_task():
    # Do your awesome thing
    return

我在我的
cellery.py
中添加了
CELERYBEAT\u计划
dic(在您的示例中
cellery\u app.py
)。但是,当我运行芹菜工人时……我得到
没有名为芹菜的模块
我必须使用
python manage.py…
,我执行了
python manage.py芹菜节拍
,现在它运行正常了。最后,我使用基于类的任务,比如西芹中的
MyTask(PeriodicTack)
任务导入PeriodicTask谢谢!!你在命令行方面帮了我很大的忙,我运行了
python manage.py芹菜工人-l info-B
,现在它工作得很好,我仍然不知道我需要如何使用
python manage.py…
如果你有一些想法,我很高兴你能给我解释一下。现在我每两周执行一次,你知道怎么做吗?嘿,很抱歉反应太晚了。如果你还感兴趣的话。我隐约记得,当我运行
芹菜工人..
命令时,我遇到一个问题,说:
没有模块名芹菜
。这通常是因为官方文档和许多其他指南将我在这里命名的同一个文件命名为
cellery\u app.py
to
cellery.py
,这导致python导入混淆。它不确定您想要导入实际芹菜库或芹菜.py的意思。至于您关于
python manage.py…
I的问题,我个人不知道您可以使用
python manage.py芹菜
命令运行芹菜服务器。我只使用过
python manage.py…
来运行django特定的命令。但这样做是有意义的,因为它会自动导入项目设置,而且会很有用。实际上,我结束了编写脚本来处理为我的应用程序部署导入应用程序设置的工作。