python:在django中用celery实现异步

celery英文官方网站:www.celeryproject.org
中文网站:http://docs.jinkan.org/docs/celery/

celery

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。
专注于实时处理的任务队列,同时也支持任务调度。

作用:

  • 解决耗时操作:开一个新的进程,去操作耗时操作,不影响原有进程 定时操作,使
  • List item

用celery定时执行

操作:

  1. 定义一个任务task,也就是一个python函数
  2. 将耗时任务存储到队列queue中
  3. 在一个新的进程中,负责执行队列中的任务,worker
  4. broker:负责调度,将任务加到队列中,在布置环境中使用redis

安装包

pip install celery
pip install celery-with-redis
pip install django-celery

配置settings
将djcelery包加入到INSTALLED_APPS中
并添加以下代码:

import djcelery
djcelery.setup_loader()	# 初始化所有的task
BROKER_URL = 'redis://127.0.0.1:6379/0'	# 把所有的任务放在queue中,默认用0这个数据库
CELERY_IMPORTS = ('test1.task')	# 在test1这个应用下使用任务

在test1应用目录下创建task.pty文件

import time
from celery import task

@task
def show():
	print('hello...')
	time.sleep(5)
	print('world...')

迁移,生成celery需要的数据表
此时不需要生成迁移,直接进行迁移

python manage.py migrate

启动redis

sudo redis-server /etc/redis/redis.conf

启动worker

python manage.py celery worker --loglevel=info

定义视图,调用task
函数名.delay([参数])

from task import *

def celeryTest(request):
	show.delay()
	return HttpResponse('ok')

配置url

url(r'^celerytest/$', views.celeryTest),

总结:

  • 简单:易使用和维护,不需要配置文件
  • 高可用性:如果链接丢失或者失败,客户端会自动重试,并broker通过主/主或者主/从方式复制来提高可用性。
  • 快速:单个celery进程每分钟可处理数以百万计的任务
  • 灵活:celery几乎所有的部分都可以扩展或者单独使用。

你可能感兴趣的:(python,django,celery,异步,django)