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输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
Python中类的创建和实例化操作示例
Feb 27 Python
pandas DataFrame创建方法的方式
Aug 02 Python
python数值基础知识浅析
Nov 19 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
python实现简单的购物程序代码实例
Mar 03 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
MYSQL数据库初学者使用指南
2006/11/16 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
cakephp常见知识点汇总
2017/02/24 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
Vue指令指令大全
2019/02/09 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
办公室前台的岗位职责
2013/12/20 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
拉歌口号大全
2014/06/13 职场文书
施工安全汇报材料
2014/08/17 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书