tornado+celery的简单使用详解

 更新时间:2019年12月21日 11:06:55   作者:github_25679381  
今天小编就为大家分享一篇tornado+celery的简单使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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 TensorFlow介绍与实战

    Python TensorFlow介绍与实战

    这篇文章介绍了Python TensorFlow介绍与实战,通过本文的介绍,我们不仅了解了TensorFlow的基本概念和安装方法,还通过线性回归和卷积神经网络的实例,深入探讨了 TensorFlow 的使用技巧,TensorFlow 的强大功能和灵活性使其成为深度学习领域的重要工具,需要的朋友可以参考下
    2024-07-07
  • python如何在循环引用中管理内存

    python如何在循环引用中管理内存

    这篇文章主要为大家详细介绍了python如何在循环引用中管理内存,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python设计模式之工厂模式简单示例

    Python设计模式之工厂模式简单示例

    这篇文章主要介绍了Python设计模式之工厂模式,简单说明了工厂模式的原理,并结合实例形式给出了Python实现工厂模式的具体操作技巧,需要的朋友可以参考下
    2018-01-01
  • python 实现控制鼠标键盘

    python 实现控制鼠标键盘

    这篇文章主要介绍了python 控制鼠标键盘的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • 在windows下快速搭建web.py开发框架方法

    在windows下快速搭建web.py开发框架方法

    这篇文章主要介绍了在windows下快速搭建web.py开发框架方法,需要的朋友可以参考下
    2016-04-04
  • python实现广度优先搜索过程解析

    python实现广度优先搜索过程解析

    这篇文章主要介绍了python实现广度优先搜索过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • python3 shelve模块的详解

    python3 shelve模块的详解

    这篇文章主要介绍了python3 shelve模块的详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • 使用Python计算两个不同列表的相似度

    使用Python计算两个不同列表的相似度

    这篇文章主要介绍了使用Python计算两个不同列表的相似度,Python数据开发工作中的需求两个不同列表给出相似度,本文实现判断数字类型相似度和字符串类型相似度,非常实用,需要的朋友可以参考下
    2023-07-07
  • 使用Python实现压缩pptx的功能

    使用Python实现压缩pptx的功能

    当处理大型PPTX文件时,其中包含许多高分辨率照片时,文件大小可能会显著增加,为了解决这个问题,我们可以使用Python编程语言和python-pptx库来压缩PPTX文件中的照片,下面我们就来看看具体操作吧
    2024-02-02
  • Python中的程序流程控制语句

    Python中的程序流程控制语句

    这篇文章主要介绍了Python中的程序流程控制语句,本篇博客将会讲述一下Python语言中的流程控制语句,在高中我们数学中学过程序流程题,下面我们来看看python中得流程语句会是怎么样呢,需要的小伙伴可以参考一下
    2022-02-02

最新评论