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  __getattr__与__setattr__使用方法
Sep 06 Python
Python3计算三角形的面积代码
Dec 18 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
python删除不需要的python文件方法
Apr 24 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
通过实例学习Python Excel操作
Jan 06 Python
Python错误的处理方法
Jun 23 Python
Python如何定义有可选参数的元类
Jul 31 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
解决Python import .pyd 可能遇到路径的问题
Mar 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 If Else(elsefi) 语句
2013/04/07 PHP
php 获取本地IP代码
2013/06/23 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
php实现递归的三种基本方式
2020/07/04 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python 提取文件的小程序
2009/07/29 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
python制作小说爬虫实录
2017/08/14 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
Python常见的pandas用法demo示例
2019/03/16 Python
关于Python作用域自学总结
2019/06/10 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
员工工作表扬信范文
2014/01/13 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书