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 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
利用Python检测URL状态
Jul 31 Python
Python3常用内置方法代码实例
Nov 18 Python
wxPython实现分隔窗口
Nov 19 Python
Python 列表的清空方式
Jan 13 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
详解Python高阶函数
Aug 15 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
Pytorch可视化的几种实现方法
Jun 10 Python
python实现局部图像放大
Nov 17 Python
Python学习之时间包使用教程详解
Mar 21 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实现利用MySQL保存session的方法
2014/08/23 PHP
php中文验证码实现方法
2015/06/18 PHP
JQuery创建DOM节点的方法
2015/06/11 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python处理document文档保留原样式
2019/09/23 Python
python创建学生管理系统
2019/11/22 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
学生档案自我鉴定
2013/10/07 职场文书
个人自荐信
2013/12/05 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
《画风》教学反思
2014/04/16 职场文书
大学生励志演讲稿
2014/04/25 职场文书
环保倡议书范文
2014/05/12 职场文书
冬季施工防火方案
2014/05/17 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
民主评议党员总结
2014/10/20 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书