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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
Python实现的批量下载RFC文档
Mar 10 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python处理CSV与List的转换方法
Apr 19 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
python实现点对点聊天程序
Jul 28 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
Python paramiko使用方法代码汇总
Nov 20 Python
Python Django搭建文件下载服务器的实现
May 10 Python
python通过新建环境安装tfx的问题
May 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
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
python复制文件代码实现
2013/12/23 Python
Python写的英文字符大小写转换代码示例
2015/03/06 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Python列表对象实现原理详解
2019/07/01 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
制冷与电控专业应届生求职信
2013/11/11 职场文书
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
行政专员的岗位职责
2014/03/10 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
移除Selenium中window.navigator.webdriver值
2022/06/10 Python