python3.8+django2+celery5.2.7环境准备(python测试开发django)
作者:上海-悠悠 发布时间:2022-08-19 06:17:14
前言
以前版本的 Celery 需要一个单独的库(django-celery)来与 Django 一起工作,但从 3.1 开始不再是这种情况。
现在支持开箱即用的 Django,因此本文档仅包含集成 Celery 和 Django 的基本方法.
celery5.x 不支持windows平台了。Celery 5.0.x 支持 Django 1.11 LTS 或更新版本。
版本要求
Celery 5.2 版运行于
Python❨3.7、3.8、3.9、3.10❩
PyPy3.7、3.8 ❨7.3.7❩
Celery 4.x 是支持 Python 2.7 的最后一个版本,
Celery 5.x 需要 Python 3.6 或更高版本。
Celery 5.1.x 还需要 Python 3.6 或更高版本。
Celery 5.2.x 需要 Python 3.7 或更新版本。
如果您运行的是旧版本的 Python,则需要运行旧版本的 Celery:
Python 2.7 或 Python 3.5:Celery 系列 4.4 或更早版本。
Python 2.6:Celery 系列 3.1 或更早版本。
Python 2.5:Celery 系列 3.0 或更早版本。
Python 2.4 是 Celery 系列 2.2 或更早版本。
Celery 是一个资金很少的项目,所以不支持 Microsoft Windows。请不要打开与该平台相关的任何问题。
环境准备
运行系统:linux(centos/debian/ubuntu),不支持windows
Python版本:3.8.5
Django : 2.2.2
celery: 5.2.7
使用pip安装celery5.2.7版本
pip install celery==5.2.7
Django中使用Celery
要在 Django 项目中使用 Celery,您必须首先定义 Celery 库的实例(称为“应用程序”)
如果你有一个现代的 Django 项目布局,比如:
- proj/
- manage.py
- proj/
- __init__.py
- settings.py
- urls.py
那么推荐的方法是创建一个新的proj/proj/celery.py模块来定义 Celery 实例:
proj/proj/celery.py
文件内容
import os
from celery import Celery
# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django apps.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
然后你需要在你的proj/proj/init.py 模块中导入这个应用程序。这可以确保在 Django 启动时加载应用程序,以便@shared_task装饰器(稍后提到)将使用它:
proj/proj/__init__.py
内容:
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
__all__ = ('celery_app',)
请注意,此示例项目布局适用于较大的项目,对于简单的项目,您可以使用单个包含的模块来定义应用程序和任务
让我们分解第一个模块中发生的事情,首先,我们设置默认值DJANGO_SETTINGS_MODULEcelery命令行程序的环境变量:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
您不需要此行,但它使您不必总是将设置模块传递给celery程序。它必须始终在创建应用程序实例之前出现,就像我们接下来要做的那样:
app = Celery('proj')
这是我们的库实例,您可以有很多实例,但在使用 Django 时可能没有理由这样做。
我们还将 Django 设置模块添加为 Celery 的配置源。这意味着您不必使用多个配置文件,而是直接从 Django 设置中配置 Celery;但如果需要,您也可以将它们分开。
app.config_from_object('django.conf:settings', namespace='CELERY')
大写命名空间意味着所有 Celery 配置选项 必须以大写而不是小写指定,并且以 开头 CELERY_,例如task_always_eager设置变为CELERY_TASK_ALWAYS_EAGER,broker_url 设置变为CELERY_BROKER_URL。这也适用于工作人员设置,例如,worker_concurrency 设置变为CELERY_WORKER_CONCURRENCY.
例如,一个 Django 项目的配置文件可能包括:
...
# Celery Configuration Options
CELERY_TIMEZONE = "Australia/Tasmania"
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
您可以直接传递设置对象,但使用字符串更好,因为这样工作人员不必序列化对象。CELERY_命名空间也是可选的,但建议使用(以防止与其他 Django 设置重叠)。
接下来,可重用应用程序的一个常见做法是在单独的tasks.py模块中定义所有任务,Celery 确实有一种方法可以自动发现这些模块:
app.autodiscover_tasks()
使用上面的代码,Celery 将自动从您安装的所有应用程序中发现任务,遵循tasks.py约定:
- app1/
- tasks.py
- models.py
- app2/
- tasks.py
- models.py
这样您就不必手动将各个模块添加到CELERY_IMPORTS设置中。
最后,该debug_task示例是一个转储自己的请求信息的任务。这是使用bind=True Celery 3.1 中引入的新任务选项来轻松引用当前任务实例。
使用 @shared_task
装饰器
您编写的任务可能会存在于可重用的应用程序中,而可重用的应用程序不能依赖于项目本身,因此您也不能直接导入您的应用程序实例。
装饰器允许您在@shared_task没有任何具体应用实例的情况下创建任务:
demoapp/tasks.py:
# Create your tasks here
from demoapp.models import Widget
from celery import shared_task
@shared_task
def add(x, y):
return x + y
@shared_task
def mul(x, y):
return x * y
@shared_task
def xsum(numbers):
return sum(numbers)
@shared_task
def count_widgets():
return Widget.objects.count()
@shared_task
def rename_widget(widget_id, name):
w = Widget.objects.get(id=widget_id)
w.name = name
w.save()
您可以在以下位置找到 Django 示例项目的完整源代码: https ://github.com/celery/celery/tree/master/examples/django/
django-celery-results 保存结果
django-celery-results- 使用 Django ORM/Cache 作为结果后端
django-celery-results扩展使用Django ORM 或 Django Cache 框架提供结果后端。
要将其用于您的项目,您需要执行以下步骤:
1.安装django-celery-results库:
pip install django-celery-results
2.添加django_celery_results到INSTALLED_APPS您的 Django 项目中settings.py:
INSTALLED_APPS = (
...,
'django_celery_results',
)
请注意,模块名称中没有破折号,只有下划线。
3.通过执行数据库迁移来创建 Celery 数据库表:
python manage.py migrate django_celery_results
4.配置 Celery 以使用django-celery-results后端。
假设您使用 Djangosettings.py来配置 Celery,添加以下设置
CELERY_RESULT_BACKEND = 'django-db'
对于缓存后端,您可以使用:
CELERY_CACHE_BACKEND = 'django-cache'
我们也可以使用 django 的 CACHES 设置中定义的缓存。
# celery setting.
CELERY_CACHE_BACKEND = 'default'
# django setting.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
有关其他配置选项,请查看 任务结果后端https://docs.celeryq.dev/en/stable/userguide/configuration.html#conf-result-backend设置参考。
django-celery-beat 定时任务
django-celery-beat- 具有管理界面的数据库支持的定期任务。 详细资料参考https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html#beat-custom-schedulers
启动工作进程
在生产环境中,您将希望在后台将工作程序作为守护程序运行 - 请参阅守护程序-但对于测试和开发,能够使用 celery worker manage 命令启动工作程序实例很有用,就像您一样d 使用 Django 的 manage.py runserver:
celery -A proj worker -l INFO
有关可用命令行选项的完整列表,请使用帮助命令:
celery help
来源:https://blog.csdn.net/qq_27371025/article/details/125855698


猜你喜欢
- 本文实例讲述了Django框架实现分页显示内容的方法。分享给大家供大家参考,具体如下:分页1、作用数据加载优化2、前端引入bootstrap
- js的eval代码快速解密有一段js代码内容如下:eval(function(E,I,A,D,J,K,L,H){function C(A)后
- 1、算数运算符小例中: a = 5 &nb
- 1、使用字符串函数replace>>> a = 'hello world'>>> a.r
- 函数的作用域python中的作用域分4种情况:L:local,局部作用域,即函数中定义的变量;E:enclosing,嵌套的父级函数的局部作
- 目录1. 反向引用_命名分组2. 正则函数小提示:总结1. 反向引用_命名分组# ### 反向引用import restrvar = &qu
- 环境:1 .Windows Server 2016 Datacenter 64位2 .SQL Server 2016 Enterprise
- 具体代码如下所示:package mainimport ( "bufio" "io&q
- -- 任意的测试表 代码如下:CREATE TABLE test_delete( name varchar(10), value INT )
- 本文实例讲述了Python爬虫框架Scrapy基本用法。分享给大家供大家参考,具体如下:Xpath<html><head&
- Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统
- 本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下:s = "abcde"list的[]中
- 本篇博客主要介绍的是pyinstaller在windows下的基本使用和基础避坑在windows中使用pyinstaller工具打包时会出现
- 示例.1import randomfrom random import shufflex = [[i] for i in range(10)
- abs(number) 返回绝对值。 array(arglist) 创建一个数组。 asc(string) 返回字符串第一个字符的ansi码
- 关于Python的格式化字符串,几乎所有接触过Python语言的人都知道其中一种,即使用运算符%,但对于绝大多数初学者来说也仅此而已。因此,
- 本文实例为大家分享了用matplotlib中scatter方法画散点图的具体代码,供大家参考,具体内容如下1、最简单的绘制方式绘制散点图是数
- 通过第三方BeautifulSoup库来爬取op.gg网页静态数据主要思路op.gg网站网站以出场率高低排名,并且列出对位胜率,在高出场率的
- 前言最近看到老婆天天在手机上玩数独,突然想起 N 年前刷 LeetCode 的时候,有个类似的算法题(37.解数独),是不是可以把这个算法进
- 前言说起面试,很多同学都经历过,但是 面试中 可能会遇到各种问题,MySQL 的问题 也是非常多,最近我也经常面试,也希望问一些数据库一些偏