tornado+celery的简单使用详解
celery是实现一个简单,灵活可靠的分布式任务队列系统的好选择
首先是celeryconfig文件的编写
celeryconfig.py
#coding=utf-8
from kombu import Queue
CELERY_DEFAULT_EXCHANGE_TYPE = 'direct'
# 时区
CELERY_TIMEZONE = 'Asia/Shanghai'0
# 启动时区
CELERY_ENABLE_UTC = True
# 默认队列
CELERY_DEFAULT_QUEUE = 'mytask0'
# 默认队列的Key
CELERY_DEFAULT_ROUTING_KEY = 'task.mytask0'
# 创建队列,执行异步任务
CELERY_QUEUES = (
Queue('mytask', routing_key='task.mytask'),
)
# 创建执行路由
CELERY_ROUTES = {
'task.mytask': {
'queue': 'mytask',
'routing_key': 'task.mytask',
},
}
# 定时任务
CELERYBEAT_SCHEDULE = {
'task.mytask': {
'task': 'task.mytask'',
'schedule': crontab(minute="1"),
},
}
task.py
#coding=utf-8
from celery import Celery
from celery.bin import worker as celery_worker
import celeryconfig
broker = 'amqp://'
backend = 'amqp'
app = Celery('task', backend=backend, broker=broker)
app.config_from_object(celeryconfig)
@app.task
def mytask(task_name):
print "task:%s" %task_name
return task_name
def worker_start():
worker = celery_worker.worker(app=app)
worker.run(broker=broker, concurrency=4,
traceback=False, loglevel='INFO')
if __name__ == "__main__":
worker_start()
执行python task.py将会启动worker
tornado调用celery将阻塞任务变为非阻塞
这会使用到tcelery模块,即tornado下的一个非阻塞的broker实现