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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
Python lambda和Python def区别分析
Nov 30 Python
python实现计算倒数的方法
Jul 11 Python
Python编程实现蚁群算法详解
Nov 13 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
Python字典对象实现原理详解
Jul 01 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
Keras loss函数剖析
Jul 06 Python
8种常用的Python工具
Aug 05 Python
python从ftp获取文件并下载到本地
Dec 05 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
理解JS绑定事件
2016/01/19 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
Python标准库defaultdict模块使用示例
2015/04/28 Python
Python实现excel转sqlite的方法
2017/07/17 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
红旗团支部事迹材料
2014/01/27 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书