栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django系列11 - windows下的异步任务环境配置

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django系列11 - windows下的异步任务环境配置

windows下的异步任务环境配置
  • 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_management 
1.2 登录rabbitmq

http://localhost:15672
guest/guest

1.3 配置 rabbitmq
  • 新建用户:rabbit/atstudy
  • 新建 rabbitmq 的 virtual host(test_plt)
  • 点击新添加的用户名,给用户添加 virtual host (test_plt)
2、在 django 的虚拟环境安装 celery

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进行管理。
2.2 、settings同级目录下新增celery.py
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,这里注意下生成迁移文件的路径

2.5、启动 celery worker,检查broker(rabbitMQ)是否正常运行,
Celery -A auto_test_platform worker -l info -P eventlet


2.6、执行 debug_task,验证异步调用是否成功

(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 ,执行安装命令:
  • 你的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
3、查看界面,异步任务添加ok

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号