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程序中设置HTTP代理
Nov 06 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
python编辑用户登入界面的实现代码
Jul 16 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
Python实现8种常用抽样方法
Jun 27 Python
Python Django获取URL中的数据详解
Nov 01 Python
python画条形图的具体代码
Apr 20 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中ADODB类详解
2008/03/25 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
Yii核心验证器api详解
2016/11/23 PHP
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
python连接mysql调用存储过程示例
2014/03/05 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python爬取音频下载的示例代码
2020/10/19 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
建材业务员岗位职责
2013/12/08 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
《火烧云》教学反思
2016/02/23 职场文书