tornado+celery的简单使用详解
celery是实现一个简单,灵活可靠的分布式任务队列系统的好选择
tornado则不用过多介绍
在开发机上安装rabbitmq这里就不介绍了
首先是task文件的编写
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('celery_test', backend=backend, broker=broker) app.config_from_object(celeryconfig) @app.task def mytask0(task_name): print "task0:%s" %task_name return task_name @app.task def mytask1(task_name): print "task1:%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()
celeryconfig.py文件中包含对celery的配置
#coding=utf-8 from kombu import Queue CELERY_DEFAULT_QUEUE = 'mytask0' CELERY_QUEUES = ( Queue('mytask0', routing_key='task.mytask0'), Queue('mytask1', routing_key='task.mytask1'), ) CELERY_DEFAULT_EXCHANGE_TYPE = 'direct' CELERY_DEFAULT_ROUTING_KEY = 'task.mytask0' CELERY_TIMEZONE = 'Asia/Shanghai' CELERY_ROUTES = { 'task.mytask0': { 'queue': 'mytask0', 'routing_key': 'task.mytask0', }, 'task.mytask1': { 'queue': 'mytask1', 'routing_key': 'task.mytask1', }, }
执行python task.py将会启动worker
tornado调用celery将阻塞任务变为非阻塞
这会使用到tcelery模块,即tornado下的一个非阻塞的broker实现
app.py
#coding=utf-8 from tornado import web import task class TestHandler(tornado.web.RequestHandler): @web.asynchronous def get(self): task.mytask0.apply_async( args=['task0'], queue='mytask0', routing_key='task.mytask0', callback=self.on_success) def on_success(self, result): self.finish({'task':result.result})
start.py
用于实现tornado服务的启动
#coding=utf-8 import tornado from tornado.options import define, options, parse_command_line from tornado.log import enable_pretty_logging import tcelery from app import TestHandler import tornado.httpserver define("port", default=8000, help="run on the given port", type=int) define("debug", default=False, help="run in debug mode") urls = [(r"/api/task/test", TestHandler)] def server_start(): app = tornado.web.Application(urls, debug=options.debug) enable_pretty_logging() parse_command_line() server = tornado.httpserver.HTTPServer(app) server.bind(options.port) server.start(2) tcelery.setup_nonblocking_producer(limit=2) tornado.ioloop.IOLoop.current().start() if __name__ == "__main__": server_start()
执行python start.py即可启动服务
以上这篇tornado+celery的简单使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
pytest解读fixtures中yield与addfinalizer区别
这篇文章主要为大家介绍了pytest官方解读fixtures中yield与addfinalizer区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-06-06Python判断远程服务器上Excel文件是否被人打开的方法
这篇文章主要介绍了Python如何判断远程服务器上Excel文件是否被人打开,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-07-07使用tensorflow DataSet实现高效加载变长文本输入
今天小编就为大家分享一篇使用tensorflow DataSet实现高效加载变长文本输入,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-01-01pybaobabdt库基于python的决策树随机森林可视化工具使用
这篇文章主要为大家介绍了pybaobabdt库基于python的决策树随机森林可视化工具使用探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2024-02-02
最新评论