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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
python使用7z解压软件备份文件脚本分享
Feb 21 Python
Python 基础教程之str和repr的详解
Aug 20 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
python 编写简单网页服务器的实例
Jun 01 Python
python实现梯度下降算法
Mar 24 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
Python高并发解决方案实现过程详解
Jul 31 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 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实现文件安全下载
2006/10/09 PHP
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
Python Property属性的2种用法
2015/06/21 Python
python 获取网页编码方式实现代码
2017/03/11 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
学生信息管理系统python版
2018/10/17 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
python代码区分大小写吗
2020/06/17 Python
银行实习的自我鉴定
2013/12/10 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
经典演讲稿汇总
2014/05/19 职场文书
精神文明建设标语
2014/06/16 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
大学生求职意向书
2015/05/11 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
java基础——多线程
2021/07/03 Java/Android
Python制作一个随机抽奖小工具的实现
2021/07/07 Python