- 安装包:
Package version last version celery 5.3.6 5.3.6 django-celery-results 2.5.1 2.5.1 django-redis 5.4.0 5.4.0 eventlet 0.34.2 0.34.2
- 目录结构
- setting
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # celery模块 'App07.apps.App07Config', 'celery', 'django_celery_results', ] # celery配置 # 将数据存到redis数据库中,默认是16个数据库 BROKER_URL = 'redis://127.0.0.1:6379/1' CELERY_RESULT_BACKEND = 'django-db' CELERY_ACCEPT_CONTENT = ['json'] # 分布式可接受的任务为json CELERY_TASK_SERIALIZER = 'json' # 任务序列化和反序列化使用json CELERY_RESULT_SERIALIZER = 'json' # 结果序列化使用json CELERY_TIMEZONE = 'Asia/Shanghai' # 使用上海时区 CELERY_ENABLE_UTC = False CELERYD_MAX_TASKS_PER_CHILD = 1000 # 每个worker经过1000次后,重启 CELERY_TASK_RESULT_EXPIRES = 60*60*24 # 后端存储任务超过一天,则自动清理数据,单位位 # celery定时任务 CELERYBEAT_SCHEDULE = { 'schedule-hello':{ 'task': 'App07.tasks.hello_world', 'schedule': timedelta(seconds=10), 'args': (5,) } }
- celery.py
import os from datetime import timedelta from celery import Celery from day02 import settings # 设置工程配置信息 os.environ.setdefault('DJANGO_SETTINGS_MODULE','day02.settings') # 配置方法一 # # 消息中间件,密码是你redis的密码 # # broker='redis://:123456@127.0.0.1:6379/2' 密码123456 # broker = 'redis://127.0.0.1:6379/0' # 无密码 # # 任务结果存储 # # backend = 'redis://127.0.0.1:6379/1' # backend = 'django-db' # # 包含任务的所有模块的导入路径: # task_module = [ # # 'App07.async_task', # 写任务模块导入路径,该模块主要写异步任务的方法 # 'App07.tasks', # 写任务模块导入路径,该模块主要写定时任务的方法 # ] # 实例化celery.第一个参数是应用名 # app = Celery('mycelery') # app = Celery('task',broker=broker,backend=backend,include=task_module) # 指定时区 # app.conf.timezone = 'Asia/Shanghai' # # 定时任务配置 # app.conf.beat_schedule = { # 'schedule-hello':{ # 'task': 'App07.tasks.hello_world', # 'schedule': timedelta(seconds=10), # 'args': (5,) # } # } # 方法二 # 实例化celery.第一个参数是应用名 app = Celery('mycelery') # 指定时区 app.conf.timezone = 'Asia/Shanghai' # 指定setting的配置源,用的是项目setting的配置信息。 app.config_from_object('django.conf:settings') # 让celery自动发现我们的任务task # 需要在应用app下面建tasks.py app.autodiscover_tasks() # 从已经安装的app中查找任务 # app.autodiscover_tasks(settings.INSTALLED_APPS)
- urls.py
from django.urls import path from App07 import views app_name = 'App07' urlpatterns = [ path('',views.index,name='index'), # celery path('task/',views.exec_task,name='task'), # path('active/<token>/',views.check_active,name='active'), ]
- views.py
from django.http import HttpResponse from django.shortcuts import render from App07.tasks import hello_world # Create your views here. def index(request): return HttpResponse('app07启动') def exec_task(request): # 把任务添加到任务队列,并延时5s执行 # hello_world(5) hello_world.delay(5) return HttpResponse('celery测试')
- tasks.py 解决问题 关键是:
@app.task(name='tasks.hello_world') 标红的错误。改成
@app.task(name='App07.tasks.hello_world') 或者 直接
@shared_task 也可以。问题解决。
import time from celery import shared_task from App07.celery import app # @shared_task @app.task(name='tasks.hello_world') def hello_world(n): for i in range(n): print('hello world') time.sleep(1)
celery 和 beat 启动
# worker 启动 #windows系统 celery -A celery_task worker -l info -P eventlet #linux系统 celery -A celery_task worker -l info # beat 启动 celery -A celery_task beat -l info
12-31
3771
03-21
610
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交