- 1、在windows上安装 rabbitmq
- 1.1 安装 rabbitMQ
- 1.2 登录rabbitmq
- 1.3 配置 rabbitmq
- 2、在 django 的虚拟环境安装 celery
- 2.1、django 虚拟环境安装依赖包
- 2.2 、settings同级目录下新增celery.py
- 2.3 、修改settings同级目录下的__init__.py
- 2.4、 在django项目的settings.py里面添加celery的配置选项
- 2.5、启动 celery worker,检查broker(rabbitMQ)是否正常运行,
- 2.6、执行 debug_task,验证异步调用是否成功
- 2.7、查看django界面报错,安装mysql时区插件
- 3、查看界面,异步任务添加ok
1、在windows上安装 rabbitmq
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗
1.1 安装 rabbitMQ- 安装Erlang[Erlang是一种通用的面向并发的编程语言],安装包已上传CSDN资源
- 安装 rabbitMQ ,安装包已上传CSDN资源
- 安装插件
"C:/Program Files/RabbitMQ Server/rabbitmq_server-3.8.17/sbin/rabbitmq-plugins.bat" enable rabbitmq_management1.2 登录rabbitmq
1.3 配置 rabbitmqhttp://localhost:15672
guest/guest
- 新建用户:rabbit/atstudy
- 新建 rabbitmq 的 virtual host(test_plt)
- 点击新添加的用户名,给用户添加 virtual host (test_plt)
Celery是基于Python开发的分布式任务队列。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。
2.1、django 虚拟环境安装依赖包- pip install celery==5.0.5
Celery 是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具。这是一个任务队列,着重于实时处理,同时还支持任务调度。
Celery 通过消息进行通信,通常使用经纪人在 clients 和 workers 之间进行调解。要启动一个任务,客户端会在队列中放入一条消息,然后经纪人将消息传递给工人。 - pip install django-celery-results
此扩展使您能够使用 Django ORM 存储 Celery 任务结果。
它定义了一个用于存储任务结果的模型( django_celery_results.models.TaskResult),您可以像查询任何其他 Django 模型一样查询此数据库表。 - pip install django-celery-beat
可以从 Django 管理界面管理周期性任务,您可以在其中创建、编辑和删除周期性任务以及它们应该运行的频率。 - pip install flower
一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。 - windows启动 celery,要提前安装:pip install eventlet
eventlet是一个用来处理和网络相关的python库函数,且可以通过协程(coroutines)实现并发。在eventlet里,将协程叫做greenthread(绿色线程),所谓并发,即开启多个greenthread,并对这些greenthread进行管理。
import os
from celery import Celery
# 设置Celery需要环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'auto_test_platform.settings')
# 实例化Celery
app = Celery('auto_test_platform')
# 允许在Django配置文件中对Celery进行配置。
# namespace指定所有Celery配置必须以CELERY开头,避免冲突
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动从已注册到Django的app中发现任务,通常在单独的tasks.py模块中定义所有任务
app.autodiscover_tasks()
# 一个测试任务
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
2.3 、修改settings同级目录下的__init__.py
from .celery import app as celery_app
# 这压根可以确保在Django启动时加载应用程序,以便@shared_task装饰器时使用它:
__all__ = ('celery_app',)
2.4、 在django项目的settings.py里面添加celery的配置选项
(1)更改配置
INSTALLED_APPS = [
'django_celery_results',
]
# ######### CELERY ################
# 最重要的配置,消息broker的连接方式,格式为:db://user:password@host:port/dbname
CELERY_BROKER_URL = 'amqp://rabbit:atstudy@localhost:5672/test_plt'
# 时区设置
CELERY_TIMEZONE = TIME_ZONE
# 为Django_celery_results 存储celery任务执行结果设置后台
# 格式为:db+schema://user:password@host/dbname
# 支持数据库django-db和缓存django-cache存储任务状态及结果
CELERY_RESULT_BACKEND = 'django-db'
# 为任务设置超时时间,单位秒,即超时中止,执行下个任务
CELERY_TASK_TIME_LIMIT = 600 # 千万注意根据项目时间情况计算!!
# 为存储结果设置过期日期,默认你为1天。设置为0,存储结果不会过期
# 如果beat开启,celery每天会自动清除过期记录
CELERY_RESULT_EXPIRES = 259200
(2)将添加的APP整合到数据库
-
我django 装的是 4.0.4 以上,因为py manage makemigrations 没有生成文件,我直接 py manage migrate了,生成成功
-
django 4 以下的版本
py manage makemigrations
py manage migrate django_celery_results,这里注意下生成迁移文件的路径
Celery -A auto_test_platform worker -l info -P eventlet
(1)进入虚拟环境python命令行:
import os, django os.environ['DJANGO_SETTINGS_MODULE'] = "auto_test_platform.settings" django.setup() from auto_test_platform.celery import debug_task debug_task.delay()2.7、查看django界面报错,安装mysql时区插件
报错:alueError: Database returned an invalid datetime value. Are time zone definitions for your database installed?
解决办法:
- 进入网站:https://dev.mysql.com/downloads/timezones.html
- 下载 5.7 以上的 timezone_2022a_posix_sql.zip ,执行安装命令:
3、查看界面,异步任务添加ok
- 你的myql如果不是3306,执行:
"C:Program FilesMySQLMySQL Server 8.0binmysql.exe" -p 3307 -u root -p mysql < timezone_posix.sql- 你的msyql端口是3306,执行:
"C:Program FilesMySQLMySQL Server 8.0binmysql.exe" -u root -p mysql < timezone_posix.sql



