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

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

相关推荐
qq_206901395 分钟前
如何在 React 中正确使用 onClick 事件避免类型错误
jvm·数据库·python
像一只黄油飞8 分钟前
第二章-02-注释
笔记·python·学习·零基础
2401_871696528 分钟前
如何防止SQL注入利用存储过程_确保存储过程不拼字符串
jvm·数据库·python
2301_796588509 分钟前
如何在 macOS 中使用 launchd 每分钟执行一次 PHP 脚本
jvm·数据库·python
m0_748920369 分钟前
HTML函数在笔记本上卡顿怎么办_笔记本运行HTML函数优化操作【操作】
jvm·数据库·python
耿雨飞14 分钟前
Python 后端开发技术博客专栏 | 第 03 篇 面向对象编程进阶 -- 从 SOLID 原则到 Python 特色 OOP
开发语言·python·面向对象·oop
m0_6784854516 分钟前
c++如何提取系统环境变量并直接保存到txt日志中_getenv与ofstream【实战】
jvm·数据库·python
源码站~17 分钟前
基于python的校园代跑(跑腿)系统
开发语言·python
BugShare18 分钟前
一个用 Rust 编写的、速度极快的 Python 包和项目管理器
开发语言·python·rust
qq_3422958220 分钟前
Go语言怎么嵌入静态文件_Go语言embed嵌入文件教程【秒懂】
jvm·数据库·python