celery与django的结合以及定时任务配置

一、conda创建新的开发环境

C:\Users\yc>conda create --name celery_django python=3.8

C:\Users\yc>conda info -e

py38 * D:\ProgramData\Anaconda3\envs\py38

celery_django D:\ProgramData\Anaconda3\envs\celery_django

#切换到新的环境中

C:\Users\yc>activate celery_django

py38 D:\ProgramData\Anaconda3\envs\py38

celery_django * D:\ProgramData\Anaconda3\envs\celery_django

二、创建django工程

1、安装django3.2

conda install Django==3.2

如果报错:使用 pip install Django==3.2 安装

2、创建django工程

D:\pythonProject2023>django-admin startproject celeryDjagno

3、使用pyCharm打开新建的项目,选择新建的虚拟环境

启动后浏览器访问http://127.0.0.1:8000/出现如下页面说明django项目搭建成功。

安装celery

pip install celery== 5.3.6

pip install django-redis==5.3.0

pip install eventlet 注:不安装这个win10执行方法时会报错

创建一个新的文件:celeryDjagno\celeryDjagno\celery.py

复制代码
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryDjagno.settings')
app = Celery('celeryDjagno')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

在celeryDjagno\celeryDjagno\init.py:添加

复制代码
from __future__ import absolute_import, unicode_literals


from .celery import app as celery_app

__all__ = ['celery_app']

settings.py文件中添加celery配置:

redis的环境自己先安装好,不会的参考连接https://www.cnblogs.com/yclh/p/14742336.html

复制代码
CELERY_TASK_SERIALIZER = 'json'
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' # Broker配置,使用Redis作为消息中间件
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1' # BACKEND配置,这里使用redis

注:配置是使用redis作为消息队列,消息的代理和结果都是用redis,任务的序列化使用json格式。

四、创建app,编写celery的函数

1、创建app

(celery_django) D:\pythonProject2023\celeryDjagno>python manage.py startapp celery_task

创建完新的app后如何激活参照https://www.cnblogs.com/yclh/p/17127839.html 这里就不在复述。

2、在celery_task 目录下创建tasks.py文件。

添加如下内容:

复制代码
from celery import shared_task


@shared_task
def add(x,y):
    print('---------------'+str(x+y))
    return x + y

3、启动celery

D:\pythonProject2023\celeryDjagno> celery -A celeryDjagno worker -l info -P eventlet

注:-P eventlet不加win10环境下不加会报错 Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')

启动成功:

4、Dos窗口调用方法发送任务

C:\Users\yc>curl http://127.0.0.1:8000/celery/add

Celery的执行结果

Dos窗口调用方法查看任务执行状态和结果

C:\Users>curl http://127.0.0.1:8000/celery/status?id=f92166ef-ec07-4dc4-9f2e-8995dfdd3d16

五、定时任务

1、写一个定时执行的任务

2、celery里添加定时执行的任务配置,可以时间间隔也可以使用crontab表达式

3、执行定时任务

(celery_django) D:\pythonProject2023\celeryDjagno>celery -A celeryDjagno beat -l info

成功后如下图看到每3秒就把任务放进任务队列

4、启动worker (这个和上一个同时启动)

D:\pythonProject2023\celeryDjagno> celery -A celeryDjagno worker -l info -P eventlet

成功后可以看到如下方法执行结果:

相关推荐
好家伙VCC3 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
前端玖耀里4 小时前
如何使用python的boto库和SES发送电子邮件?
python
serve the people4 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源4 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手5 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手5 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_949146535 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn6 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结6 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒7 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr