-
修改项目setting.py配置
djcelery.setup_loader()
BROKER_URL = 'django://'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_ENABLE_UTC = False
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',
-
在项目下新建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)
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 实现restful API ,本次目的是为了实现异步任务先从需求说起接口实现之后,需要异步跑自动化任务,因为自动化执行是耗时耗资源的操作,不可能在请求发出去后一直等待全部结果返回,所以需要实现异步。环境: Python3.6 , PyCharm, W7Celery介绍:安装: pip install celery
Python
——Tornado框架(一)
参考博文:https://www.cnblogs.com/wupeiqi/articles/5341480.html
这个Tornado框架,与
Django
框架有什么区别呢?
Tornado连数据库的ORM操作都没有,需要自己到数据库写语句。相对于
Django
,Tornado的组件特别少。在Tornado里,主要是用的还是CBV的方式。Tornado有自己的模板引擎渲染方式。
Tornado没有form验证,没有session。所以需要自己写,自己开发组件。
2. 在
Django
视图中发出非阻塞HTTP请求。
3. 使用
Django
的
异步
视图简化基本的后台
任务
。
4. 使用sync_to_async在
异步
视图中进行同步调用。
5. 说明何时应该使用或不应该使用
异步
视图。
6. 如果在
异步
视图中调用同步
任务
怎么办?
7. 如果在
异步
视图中进行同步
任务
和
异步
任务
调用怎么办?
8. 既然
Django
已经支持
异步
视图了,那么
Celery
还有用吗?
Tornado应该运行在类Unix平台,为了达到最佳的性能和扩展性,仅推荐Linux和BSD(充分利用Linux的epoll工具和BSD的kqueue达到高性能处理的目的)db.py
main.py......
### 回答1:
Django
Celery
是一个用于
Django
项目的分布式
任务
队列,可以用来处理
异步
任务
和定时
任务
。其中,定时
任务
可以通过
Celery
Beat 来
实现
,它可以根据配置的时间间隔或者时间点来执行
任务
。
Celery
Beat 可以与
Celery
Worker 配合使用,
实现
任务
的
异步
执行。通过
Django
Celery
和
Celery
Beat,我们可以方便地
实现
定时
任务
,提高应用的性能和可靠性。
### 回答2:
Django
celery
是一个
Python
应用程序框架,专门用于在后台运行分布式
任务
,有时也被称为分布式队列。在应用程序中,定时
任务
是一个非常常见的
任务
,
Django
celery
提供了一个强大的定时
任务
管理系统来解决这个问题。
Django
celery
的定时
任务
是基于定时器和消息中间件构建的。它使用
Celery
Beat作为作业调度程序,并配合 Redis/RabbitMQ 等中间件
实现
消息队列。
Django
celery
的主要优点是:它是一个分布式的后台
任务
队列处理工具,可以把
任务
异步
化,这样可以避免等待的时间,提高后台处理效率。
Django
celery
提供了一个
Celery
Beat 守护进程来提供定时
任务
的功能。它可以通过两种方式执行定时
任务
:
1. 周期性
任务
:这些
任务
在固定的时间间隔内按照预定义的计划运行。例如,我们可以计划在每小时的第15分运行一次
任务
,或在每天的某个时候运行一次
任务
。这些计划由
Celery
Beat 系统维护并执行。我们可以通过在
Django
管理后台中录入
任务
来定义这些计划。
2. 延迟
任务
:这些
任务
在使用调度程序时不需要预定义计划。而是只需在需要执行
任务
时向
Celery
队列添加
任务
即可。这些
任务
可以通过一个延迟的
任务
调用来执行。例如,我们可以定义一个在应用程序中上传文件后执行的
任务
,或在发送电子邮件后执行一个
任务
。
Django
celery
中定义的
任务
需要满足特定的格式,通常是一个
Python
函数,它可以接收任意数量的参数,这些参数可以是
Python
任何数据类型。独立的
Django
celery
任务
不需要与应用程序的其他部分通信,因此它们比定期执行的
任务
简单得多。要执行此
任务
,请将其添加到
Celery
消息队列中即可。
总之,采用
Django
celery
可以轻松地
实现
定时
任务
,极大地提高系统的性能和效率。无论是周期性
任务
还是延迟
任务
,您都可以使用
Django
celery
来轻松定义和调度它们。无论您是在创建 Web 应用程序、处理大量数据或执行任何其他
任务
,
Django
celery
都是一个非常有用的工具。
### 回答3:
Django
celery
是一款流行的
任务
队列库,它提供的定时
任务
功能可以让你在特定的时间间隔内自动执行代码。这对于需要重复执行某些操作的应用程序来说非常有用。
要使用
Django
celery
完成定时
任务
,需要按照以下步骤进行操作:
1. 安装
Django
celery
:可以通过 pip 命令来安装,具体命令如下:
pip install
django
-
celery
2. 创建
celery
实例:在
Django
项目的根目录下,创建一个名为
celery
.py 的文件,并在其中实例化
celery
应用程序,代码如下:
```
python
from __future__ import absolute_import, unicode_literals
import os
from
celery
import
Celery
# 设置默认
DJANGO
_SETTINGS_MODULE
os.environ.setdefault('
DJANGO
_SETTINGS_MODULE', 'yourapp.settings')
app =
Celery
('yourapp')
# 使用同一个文件配置
celery
和
django
环境
app.config_from_object('
django
.conf:settings', namespace='
CELERY
')
# 从所有已注册的app中加载
任务
模块
app.autodiscover_tasks()
3. 创建定时
任务
:在
Django
项目的某个应用下,创建一个名为 tasks.py 的文件,并在其中定义需要执行的
任务
,例如:
```
python
from
celery
.decorators import periodic_task
from
celery
.task.schedules import crontab
@periodic_task(run_every=(crontab(minute='*/15')))
def my_task():
# 每15分钟执行一次的
任务
print("Task executed at " + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
4. 启动 worker 和 beat:在命令行中分别运行以下命令,分别启动 worker 和 beat:
$
celery
-A yourapp worker -l info
$
celery
-A yourapp beat -l info
5. 设置定时
任务
并运行:现在,你可以通过
Django
celery
提供的定时
任务
管理界面来设置定时
任务
,也可以在代码中自定义
任务
的时间间隔,然后启动
任务
运行。
总的来说,
Django
celery
提供的定时
任务
功能可以使你的应用在特定的时间间隔内自动执行代码,从而提高应用的效率和可靠性。需要注意的是,在设计和
实现
定时
任务
时,应尽量考虑到并发性和数据一致性等实际问题,以确保
任务
运行的正确性和稳定性。