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多线程ctrl+c退出问题解决方案
Oct 23 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
python实现kMeans算法
Dec 21 Python
手把手教你python实现SVM算法
Dec 27 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
详解Python 切片语法
Jun 10 Python
python实现从ftp服务器下载文件
Mar 03 Python
python和php学习哪个更有发展
Jun 17 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 Python
FP-growth算法发现频繁项集——构建FP树
Jun 24 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
php实现数据库的增删改查
2017/02/26 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
javascript 精粹笔记
2010/05/09 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
vue过滤器用法实例分析
2019/03/15 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python爬豆瓣电影实例
2018/02/23 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
单位委托函范文
2015/01/29 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
中学教代会开幕词
2016/03/04 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python