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实现的简单算术游戏实例
May 26 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Django内容增加富文本功能的实例
Oct 17 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
Python实现的多进程拷贝文件并显示百分比功能示例
Apr 09 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
用python-webdriver实现自动填表的示例代码
Jan 13 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
PHP之header函数详解
2021/03/02 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
js实现时间日期校验
2020/05/26 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
高中考试作弊检讨书
2014/01/14 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
行政办公室岗位职责
2014/03/18 职场文书
工程服务质量承诺书
2015/04/29 职场文书
致运动员赞词
2015/07/22 职场文书
公司会议开幕词
2016/03/03 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers