celery介绍
异步任务
-
Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务( async task )和定时任务( crontab )。 异步任务比如是发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作 ,定时任务是需要在特定时间执行的任务。它的架构组成如下图
-
- Install the django-celery-results library:
$ pip install django-celery-results
- Install the django-celery-results library:
-
2.安装celery
$ pip install django-celery-results -
3.创建celery主文件
from future import absolute_import, unicode_literals
`import os
from celery import Celery, platforms
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘website.settings’) app = Celery(‘website’)
app.config_from_object(‘django.conf:settings’, namespace=‘CELERY’) # Load task modules from all registered Django app configs. app.autodiscover_tasks() # 允许root 用户运行celery platforms.C_FORCE_ROOT = True @app.task(bind=True) def debug_task(self): print(‘Request: {0!r}’.format(self.request)) -
4.init.py 增加以下内容
from future import absolute_import # 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’] -
5.创建tasks.py
from future import absolute_import from celery import shared_task @shared_task def add(x, y):
return x + y -
6.view.py 中引用该tasks异步处理
from deploy.tasks import add
def post(request):
result = add.delay(2, 3) -
7.启动celery
celery -A website worker -l info
定时任务
- 1.celery.py文件添加如下配置以支持定时任务crontab
from celery.schedules import crontab
app.conf.update(
` CELERYBEAT_SCHEDULE = {
‘sum-task’: {
‘task’: ‘deploy.tasks.add’,
‘schedule’: timedelta(seconds=20),
‘args’: (5, 6)
}
‘send-report’: {
‘task’: ‘deploy.tasks.report’, ‘schedule’: crontab(hour=4, minute=30, day_of_week=1), } } ) - 定义了两个task:
-
- 名字为’sum-task’的task,每20秒执行一次add函数,并传了两个参数5和6
- 名字为’send-report’的task,每周一早上4:30执行report函数
- tasks.py 中添加方法
@shared_task def report(): return 5 - 启动
- celery -A website beat -l info