Django celery 击败任务不起作用

lch*_*lch 5 python django celery django-celery celerybeat

芹菜.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TwitterApiProxy.settings')

app = Celery('TwitterApiProxy')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Calls test('hello') every 10 seconds.
    sender.add_periodic_task(10.0, hello_test.s('hello'), name='add every 10')


@app.task
def hello_test(arg):
    print(arg)
Run Code Online (Sandbox Code Playgroud)

设置.py

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'America/Los_Angeles'
Run Code Online (Sandbox Code Playgroud)

我想每 10 秒打印一次“你好”。所以celery -A TwitterApiProxy beat在我的终端中运行时,我看到如下:

LocalTime -> 2018-04-06 23:27:09
Configuration ->
    . broker -> redis://localhost:6379//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%WARNING
    . maxinterval -> 5.00 minutes (300s)
Run Code Online (Sandbox Code Playgroud)

它没有打印与我安排的任务相关的任何内容。我哪里做错了?

Sos*_*ame 13

您的设置没有任何问题。

在两个单独的 cmd 窗口中启动您的 worker 和 celery beat

celery -A TwitterApiProxy worker -l info
celery -A TwitterApiProxy beat -l info
Run Code Online (Sandbox Code Playgroud)

如果你使用的是 Celery 4.0+,你必须先安装eventlet,然后像这样启动你的 worker:

celery -A TwitterApiProxy worker -l info -P eventlet
Run Code Online (Sandbox Code Playgroud)

任务管理后台

如果你想要一个任务管理后台,你可以安装和使用django-celery

  • 为什么 celery 4.0+ 需要 eventlet ? (3认同)