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字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python反转序列的方法实例分析
Mar 21 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
pandas的qcut()方法详解
Jul 06 Python
python实现图片压缩代码实例
Aug 12 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
python实现文件的分割与合并
Aug 29 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
Python urlencode和unquote函数使用实例解析
Mar 31 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/12/23 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
Python基于DES算法加密解密实例
2015/06/03 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python创建或生成列表的操作方法
2019/06/19 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
班长自荐书范文
2014/02/11 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang