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中的True,False条件判断实例分析
Jan 12 Python
玩转python爬虫之正则表达式
Feb 17 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
python实现朴素贝叶斯算法
Nov 19 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
Django中Middleware中的函数详解
Jul 18 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
python 绘制国旗的示例
Sep 27 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
Python3爬虫RedisDump的安装步骤
Feb 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
php导出生成word的方法
2015/12/25 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python字符串连接方式汇总
2014/08/21 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
常见python正则用法的简单实例
2016/06/21 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
python开发入门——列表生成式
2020/09/03 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
Exception类的常用方法
2012/06/16 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
法制宣传实施方案
2014/03/13 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
借名购房协议书范本
2014/10/06 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python