tornado+celery的简单使用详解


Posted in Python onDecember 21, 2019

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的简单使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中threading模块join函数用法实例分析
Jun 04 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Python实现的递归神经网络简单示例
Aug 11 Python
python进行文件对比的方法
Dec 24 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
Python Excel处理库openpyxl使用详解
May 09 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
详解python列表(list)的使用技巧及高级操作
Aug 15 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
Python selenium的基本使用方法分析
Dec 21 #Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 #Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 #Python
python支持多线程的爬虫实例
Dec 21 #Python
Python 实现try重新执行
Dec 21 #Python
在python shell中运行python文件的实现
Dec 21 #Python
Python 脚本的三种执行方式小结
Dec 21 #Python
You might like
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
离职保密承诺书
2014/05/28 职场文书
校运会口号
2014/06/18 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers