Skip to main content
 首页 » 编程设计

python之Django celery 击败任务不工作

2024年08月16日39emanlee

celery.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) 

settings.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' 

我想每 10 秒打印一次“hello”。因此,在我的终端中运行 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) 

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

请您参考如下方法:

您的设置没有问题。

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

celery -A TwitterApiProxy worker -l info 
celery -A TwitterApiProxy beat -l info 

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

celery -A TwitterApiProxy worker -l info -P eventlet 

任务管理后端

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