使用celery和Django处理异步任务

介绍
我们可能需要一些可以安排一些任务并定期运行一些任务或异步处理长任务的东西,而这一切都可以通过在Django Project中使用Celery来实现。

什么是Celery?
Celery是一个专注于实时处理的任务队列,它还支持任务调度。 Celery快速,简单,高度可用且灵活。

Celery需要消息传输来发送和接收消息,这可以由Redis或RabbitMQ完成。

入门
让我们开始在您的virtualenv中安装Celery软件包。

安装Celery

 

安装Redis
我们将Message Broker用作Redis,所以我们安装

Linux / Mac用户
您可以从这里下载最新版本

$ wget http://download.redis.io/releases/redis-4.0.8.tar.gz
$ tar xzf redis-4.0.8.tar.gz
$ cd redis-4.0.8
$make
Windows用户
对于Windows用户,您可以从此处获取redis的可执行文件。

安装后,请尝试是否正确安装。

$ redis-cli ping
它应该显示:

pong
同时安装redis的python包

$ pip install redis

Django的第一步
现在您已经成功安装了软件包,现在就开始学习Django Project

确保您已从YOUR_TIMEZONE更改时区。 您可以从这里获取时区

主Django项目目录中创建celery.py文件

celery_project/celery.py

在celery.py模块中添加以下代码。 该模块用于定义celery实例。

确保已使用django项目名称更改了项目名称(<your project name>)

celery_project/__init__.py

然后,我们需要将定义celery.py的应用程序导入到主项目目录的__init__.py。 这样,我们可以确保在Django项目启动时已加载应用

创建任务
现在创建一些任务

在您在INSTALLED_APPS中注册的任何应用程序中创建一个新文件

开始程序
打开一个NEW终端并运行以下命令以运行celery的worker实例,并将目录更改为您的主项目目录所在的位置,即,将manage.py文件放置的目录,并确保您已经 激活您的virtualenv(如果已创建)。

用您的项目名称更改项目名称

输出:

注意:检查上面的[tasks],它应该包含您在task.py模块中创建的任务的名称。

有关更多信息和日志,您还可以在DEBUG MODE中运行worker实例

 

注意:请勿关闭此终端,应保持打开状态!!

测试任务
现在让我们从django shell运行任务打开Django shell

delay方法运行函数:

当检查您的celery worker实例正在运行的第二个终端时,您将获得此类型的输出,显示您的任务已收到且任务已成功完成

 

未完,待续,下篇解释周期性任务。

原文:https://djangopy.org/how-to/handle-asynchronous-tasks-with-celery-and-django