Django Celery

前言

celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度。在Django中主要处理异步和定时任务。

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# file proj/proj/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))

# file proj/proj/__init__.py
from __future__ import absolute_import, unicode_literals

from .celery import app as celery_app

__all__ = ('celery_app',)

# 启动work
celery -A proj worker -l info
# 定时任务
celery -A myproject beat -l info

异步任务

1
2
3
4
5
6
7
8
9
10
from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def add(x, y):
return x + y

def common_views(request):
add.delay() # 调用异步任务
return

定时任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from celery.task.schedules import crontab  
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(minute='*', hour='*', day_of_week='*', day_of_month='*', month_of_year='*'))
def some_task():
print('periodic task test!!!!!')
time.sleep(5)
print('success')
return True

# 或
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),
}
}
)

参考

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
http://yshblog.com/blog/164
https://juejin.im/post/5b588b8c6fb9a04f834655a6

----------本文完,感谢您的阅读----------