Python Django Celery 实现异步任务
2017-11-03 20:55
851 查看
接着上一篇Python Django 实现restful API ,本次目的是为了实现异步任务
环境:
Python3.6 , PyCharm, W7
Celery介绍:
安装:
pip install celery
pip install djcelery
Celery DOC
Celery是一个简单、灵活可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列, 同时也支持任务调度。
Celery中有两个比较关键的概念
Worker: worker 是一个独立的进程,它持续监视队列中是否有需要处理的任务;
Broker: broker 也被称为中间人或者协调者,broker 负责协调客户端和 worker 的沟通。客户端向 队列添加消息,broker 负责把消息派发给 worker。
项目结构:
实现:
编写代码:
修改项目setting.py配置
在项目下新建celery.py 如上图
在应用下新建tasks.py 如上图
创建Celery所需的数据表
python manage.py migrate
启动Django服务
python manage.py runserver 0.0.0.0:8090
启动celery worker 服务
celery -A AutoApi worker -l info
celer worker 启动成功提示
提示 [2017-11-03 20:30:17,526: WARNING/MainProcess] celery@SHANB040312 ready.
代码celery worker 服务启成功了
postman 请求如下图,可以看到响应的时间是毫秒
看下console celery worker 的输出,可以看到成功执行了我们的异步任务
[2017-11-03 20:39:25,234: INFO/MainProcess] Received task: Api.tasks.running[8a994909-a139-4f2a-bcdd-58b6280a2bc3]
[2017-11-03 20:39:31,740: WARNING/Worker-1] 开始执行异步任务
[2017-11-03 20:39:31,740: WARNING/Worker-1] sit
[2017-11-03 20:39:31,741: WARNING/Worker-1] zhengxin
[2017-11-03 20:39:31,741: WARNING/Worker-1] test_taiyue.py
[2017-11-03 20:39:31,742: INFO/MainProcess] Task Api.tasks.running[8a994909-a139-4f2a-bcdd-58b6280a2bc3] succeeded in 0s: 1
其中有很多细节可以优化
broker 可以使用RabbitMQ 和 Redis
worker 可以再多启几个进程, 可以使用
可以启用 Celery Flower 它是一个 celery 的监控工具,它提供了一个图形用户界面,可以极大的方便我们监控任务的执行过程, 执行细节及历史记录,还提供了统计功能。
原理(网络资源):
celery的模块架构
工作原理
以上就是我们的异步任务的实现,后面有机会再总结下定时任务的实现和使用RabbitMQ 。
先从需求说起
接口实现之后,需要异步跑自动化任务,因为自动化执行是耗时耗资源的操作,不可能在请求发出去后一直等待全部结果返回,所以需要实现异步。环境:
Python3.6 , PyCharm, W7
Celery介绍:
安装:
pip install celery
pip install djcelery
Celery DOC
Celery是一个简单、灵活可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列, 同时也支持任务调度。
Celery中有两个比较关键的概念
Worker: worker 是一个独立的进程,它持续监视队列中是否有需要处理的任务;
Broker: broker 也被称为中间人或者协调者,broker 负责协调客户端和 worker 的沟通。客户端向 队列添加消息,broker 负责把消息派发给 worker。
项目结构:
实现:
编写代码:
修改项目setting.py配置
# celery 配置 djcelery.setup_loader() BROKER_URL = 'django://' # 使用django做broker CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定时任务. CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend' # 需要跟踪任务的状态时保存结果和状态 CELERY_ENABLE_UTC = False # 不用UTC. CELERY_TIMEZONE = 'Asia/Shanghai' # 指定上海时区 CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] # 允许的格式 CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_IGNORE_RESULT = True INSTALLED_APPS = [ 'djcelery',# 新增 'kombu.transport.django', # 新增kombu.transport.django则是基于Django的broker ]
在项目下新建celery.py 如上图
from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AutoApi.settings') app = Celery('AutoApi') app.config_from_object('django.conf:settings') app.autodiscover_tasks()
在应用下新建tasks.py 如上图
@shared_task def running(env, project, cases): print('开始执行异步任务') print(env,project,cases) # test_cases_runing(env, project, cases) 启动自动化测试 return 1
创建Celery所需的数据表
python manage.py migrate
启动Django服务
python manage.py runserver 0.0.0.0:8090
启动celery worker 服务
celery -A AutoApi worker -l info
celer worker 启动成功提示
提示 [2017-11-03 20:30:17,526: WARNING/MainProcess] celery@SHANB040312 ready.
代码celery worker 服务启成功了
postman 请求如下图,可以看到响应的时间是毫秒
看下console celery worker 的输出,可以看到成功执行了我们的异步任务
[2017-11-03 20:39:25,234: INFO/MainProcess] Received task: Api.tasks.running[8a994909-a139-4f2a-bcdd-58b6280a2bc3]
[2017-11-03 20:39:31,740: WARNING/Worker-1] 开始执行异步任务
[2017-11-03 20:39:31,740: WARNING/Worker-1] sit
[2017-11-03 20:39:31,741: WARNING/Worker-1] zhengxin
[2017-11-03 20:39:31,741: WARNING/Worker-1] test_taiyue.py
[2017-11-03 20:39:31,742: INFO/MainProcess] Task Api.tasks.running[8a994909-a139-4f2a-bcdd-58b6280a2bc3] succeeded in 0s: 1
其中有很多细节可以优化
broker 可以使用RabbitMQ 和 Redis
worker 可以再多启几个进程, 可以使用
可以启用 Celery Flower 它是一个 celery 的监控工具,它提供了一个图形用户界面,可以极大的方便我们监控任务的执行过程, 执行细节及历史记录,还提供了统计功能。
原理(网络资源):
celery的模块架构
工作原理
以上就是我们的异步任务的实现,后面有机会再总结下定时任务的实现和使用RabbitMQ 。
相关文章推荐
- Python Django Celery 实现异步任务(二)使用rabbitmq 作为broker
- 基于Django1.10与Celery4实现异步队列任务 推荐
- 【python】django-celery 实现django项目定时任务
- python:在Django项目中使用Celery实现定时任务--简单版
- Django 使用 Celery 实现异步任务
- django与celery实现异步队列任务
- 基于Django与Celery实现异步队列任务
- django+celery+ RabbitMQ实现异步任务最完整教程
- Django+Celery+Redis实现异步任务(发送邮件)
- Django基于celery的异步任务实现
- 在tornado中使用celery实现异步任务处理之一
- 使用django+celery+RabbitMQ实现异步执行
- django通过celery添加异步任务 0
- Django Celery Redis 异步执行任务demo实例
- Django中使用Celery实现定时任务(用djcelery)
- 使用 django+celery+RabbitMQ 实现异步执行
- python使用异步任务celery出现异常崩溃时retry重试 推荐
- Celery异步任务队列/周期任务+ RabbitMQ + Django
- 使用 django+celery+RabbitMQ 实现异步执行
- 异步任务队列Celery在Django中的使用