首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务

python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务

作者头像
用户9127725
发布于 2022-08-08 01:49:08
发布于 2022-08-08 01:49:08
42700
代码可运行
举报
运行总次数:0
代码可运行

在之前的一篇文章中提到了用Django+Celery+Redis实现了异步任务队列,只不过消息中间件使用了redis,redis作为消息中间件可谓是差强人意,功能和性能上都不如Rabbitmq,所以本次使用tornado框架结合celery,同时消息中间件使用Rabbitmq来实现异步发邮件,并且使用flower来监控任务队列。

    首先安装rabbitmq

    Mac os直接运行brew命令安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#安装服务
brew install rabbitmq
#启动服务
brew services start rabbitmq

    Win10系统就要下载安装包进行安装了,由于rabbitmq是基于erlang的,所以要首先安装erlang

    1、首先,下载并运行Erlang for Windows 安装程序 (地址:http://www.erlang.org/downloads)下载完毕并安装(注    意:安装目录请选择默认目录)

    2、下载 RabbitMQ,(地址:http://www.rabbitmq.com/download.html )(注意:安装目录请选择默认目录)

    安装成功后,启用web管理UI,进入RabbitMQ Serverrabbitmq_server-3.6.6sbin,输入命令rabbitmq-plugins enable rabbitmq_management

    在系统的开始菜单里找到RabbitMQ的启动菜单,启动服务

    浏览器输入,http://localhost:15672/,使用默认用户guest/guest进入网页端控制台:

    代表没有问题了

    然后安装tornado和celery,注意指定版本号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install tornado==5.1.1
pip3 install celery ==3.1
pip3 install pika ==0.9.14
pip3 install tornado-celery
pip3 install flower

    需要注意一点,由于python3.7中async已经作为关键字存在,但是有的三方库还没有及时修正,导致它们自己声明的变量和系统关键字重名,所以我们要深入三方库的源码,帮他们修改async关键字为async_my,需要修改的文件夹和文件包含但不限于:

    /site-packages/pika/adapters/libev_connection.py

/site-packages/celery下面的文件

    /site-packages/kombu下面的文件夹

    在tornado项目下新建一个任务队列文件task.py:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import time
from celery import Celery
from func_tool import mail

C_FORCE_ROOT=True

celery = Celery("tasks", broker="amqp://guest:guest@localhost:5672")
celery.conf.CELERY_RESULT_BACKEND = "amqp"


@celery.task
def sleep(seconds):
    time.sleep(float(seconds))
    return seconds

@celery.task
def sendmail(title,text,tomail):
    mail(title,text,tomail)
    return '发送邮件成功'

if __name__ == "__main__":
    celery.start()

然后编写服务端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from celery import Celery
from tornado import gen
import tcelery
sys.path.append("..")
import task

#异步任务
class CeleryHandler(BaseHandler):
    @gen.coroutine
    def get(self):
        response = yield gen.Task(task.sendmail.apply_async,args=['你好','非常好','164850527@qq.com'])
        self.write('ok')
        self.finish()

路由器代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tornado.web
from views import Index
import config


#路由 

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/celery", Index.CeleryHandler)
        ]
        super(Application,self).__init__(handlers,**config.setting)

程序入口代码server.py:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tornado.ioloop
import tornado.httpserver
import config
 
from application import Application
 
 
 
 
if __name__ == "__main__":
    print('启动...')
    app = Application()
    httpServer = tornado.httpserver.HTTPServer(app)
    # httpServer.listen(8888)
    #绑定端口
    httpServer.bind(config.options['port'])
    #开启5个子进程(默认1,若为None或者小于0,开启对应硬件的CPU核心数个子进程)
    httpServer.start(1)
    tornado.ioloop.IOLoop.current().start()

进入项目目录,分别启动tornado服务,celery服务,以及flower服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python server.py
celery -A task worker --loglevel=info
celery flower -A task --broker=amqp://guest:guest@localhost:5672//

访问网址http://localhost:8000/celery 用来触发异步任务

后台服务显示任务返回值:

进入flower在线任务监控网址:http://localhost:5555/

    至此,整个流程就走完了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
爬虫架构|Celery+RabbitMQ快速入门(二)
在上一篇文章爬虫架构|Celery+RabbitMQ快速入门(一)中简单介绍了Celery和RabbitMQ的使用以及它们之间的合作流程。本篇文章将继续讲解它们是如何配合工作的。 一、Celery介绍和基本使用 Celery是一个基于Python开发的分布式异步消息任务队列,它简单、灵活、可靠,是一个专注于实时处理的任务队列,同时也支持任务调度。通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用Celery。举几个适用场景: 1)可以在 Request-Response
黄小怪
2018/05/21
1.4K0
【RabbitMQ】RabbitMQ应用
官方安装指南:https://www.rabbitmq.com/install-rpm.html
瑞新
2021/11/08
2K0
使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构
    大家都知道,Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,在之前的一篇文章中:python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务 详细阐述了如何进行安装部署和使用,但是过程太繁琐了,先得安装Erlang,再安装rabbitmq,然后各种配置,最后由于async关键字问题还得去修改三方库的源码,其实我们可以通过docker来将celery服务封装成镜像,如此一来,以后再使用celery或者别的系统依赖celery,我们只需要将该镜像以容器的形式跑服务即可,不需要繁琐的配置与安装。
用户9127725
2022/08/08
4910
使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构
构建高效分布式系统:Celery与RabbitMQ的完美结合
在当今的软件开发中,构建高效的分布式系统是至关重要的。Python作为一种流行的编程语言,提供了许多工具和库来帮助开发人员构建分布式系统。其中,Celery和RabbitMQ是两个强大的工具,它们结合在一起可以为你的Python应用程序提供可靠的异步任务队列和消息传递机制。
一键难忘
2024/07/08
8800
celery + rabbitmq初步
执行完毕后结果存储在redis中,查看redis中的数据,发现存在一个string类型的键值对:
菲宇
2019/06/12
2.2K0
Django Celery4 定时任务配置和使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmAFvGY0-1591876971277)(https://raw.githubusercontent.com/Coxhuang/yosoro/master/20190406173617-image.png)]
Autooooooo
2020/11/09
1.4K0
Celery+Rabbitmq实现异步执行任务
Celery是Python的一个第三方库,中文为"芹菜"的意思,是一个生产者消费者模式的框架,我们使用Celery时主要用来异步执行任务或执行定时任务,这篇文章介绍实现异步执行任务的方法.
Python碎片公众号
2021/02/26
2K0
Celery+Rabbitmq实现异步执行任务
flask celery 使用方法
由于celery4.0不支持window,如果在window上安装celery4.0将会出现下面的错误
用户1214487
2018/07/31
2K0
flask celery 使用方法
真正的 Tornado 异步非阻塞
專 欄 ❈正小歪,Python 工程师,主要负责 Web 开发和日志数据处理。博客文章《真正的 Tornado 异步非阻塞》、《使用 JWT 让你的 RESTful API 更安全》等多次入选知名技术社区每日精选。《使用 Shipyard 搭建 Docker 集群》被选入 Dockerone 周报。 个人博客: https://www.hexiangyu.me GitHub: https://github.com/zhengxiaowai❈ 其中 Tornado 的定义是 Web 框架和异步网络库,其中他
Python中文社区
2018/01/31
4.3K0
真正的 Tornado 异步非阻塞
Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)
    首先明确一点,celery4.1+的官方文档已经详细说明,该版本之后不需要引入依赖 django-celery 这个库了,直接用 celery 本身就可以了,就在去年年初的一篇文章python3.7.2+Django2.0.4 使用django-celery遇到的那些坑,中提到的一些bug,在今年早已不复存在,所以技术更新频率越来越快,本文详细阐述用新版Celery(4.4.2)来实现。
用户9127725
2022/08/08
4230
Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)
任务队列神器:Celery 入门到进阶指南
celery是一个简单,灵活、可靠的分布式任务执行框架,可以支持大量任务的并发执行。celery采用典型生产者和消费者模型。生产者提交任务到任务队列,众多消费者从任务队列中取任务执行。
Python编程与实战
2021/03/24
23.1K1
任务队列神器:Celery 入门到进阶指南
【Celery实践一】安装以及入门
在去年编写自动化测试平台的时候,因为存在发送邮件、异步执行自动化任务、执行定时任务、模块解耦等需求。需要使用MQ,我选择的是RabbitMQ。
TesterHome小助手
2022/01/11
5740
【Celery实践一】安装以及入门
分布式任务队列Celery的实践
笔者在近期工作中有接触到 Celery,这是一个开源的分布式任务队列(Distributed Task Queue),在 Github 上现有 18k star,主要可以用于实现应用中的异步任务和定时任务,虽然是用 Python 编写,但协议可以用任何语言实现,现已有 gocelery、nodecelery 和 celery-php 等。
草捏子
2021/11/08
2.6K0
Celery入门
Celery是一个异步任务的调度工具,是Distributed Task Queue,分布式任务队列,分布式决定了可以有多个worker的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农。
宇宙之一粟
2020/10/26
9260
Celery入门
Django+Django-Celery+Celery的整合实战
本篇文章主要是由于计划使用django写一个计划任务出来,可以定时的轮换值班人员名称或者定时执行脚本等功能,百度无数坑之后,终于可以凑合把这套东西部署上。本人英文不好,英文好或者希望深入学习或使用的人,建议去参考官方文档,而且本篇的记录不一定正确,仅仅实现crontab 的功能而已。
菲宇
2019/06/13
2.4K0
Django+Django-Celery+Celery的整合实战
如何使用Celery和RabbitMQ设置任务队列
Celery是一个Python任务队列系统,用于处理跨线程或网络节点的工作任务分配。它使异步任务管理变得容易。您的应用程序只需要将消息推送到像RabbitMQ这样的代理,Celery worker会弹出它们并安排任务执行。
沈唁
2018/09/21
5.2K0
Django Celery初识
对于任务调度的实现方案,其实开源的项目有很多。 我先说说对于任务调度的认识,如果从数据库层面来说,任务调度就是scheduler,这一点在Oracle中体现的更为细致。 Oracle中创建scheduler,在后台运行JOB完成数据的处理,基本上会把一个任务拆分成不同的几个维度属性。 可以参考之前的一篇文章: 结合EM快速解决复杂的配置问题(r4笔记第91天) 而如果任务很多,有大批量的任务需要处理,而且任务位于不同的服务器环境中,那么这个复杂度就会大大增加,所以引入消息队列的方式就是一个很自然的方式。 消
jeanron100
2018/03/22
1.4K0
Django Celery初识
Celery的安装和使用
Celery是一个分布式任务队列工具,是一个异步的任务队列基于分布式消息传递。更多介绍可以参考 官网
the5fire
2019/02/28
1.5K0
《Python分布式计算》 第4章 Celery分布式应用 (Distributed Computing with Python)搭建多机环境安装Celery测试安装Celery介绍更复杂的Celer
本章是前面某些知识点的延续。特别的,本章以实例详细的探讨了异步编程和分布式计算。本章关注Celery,一个复杂的用于构建分布应用的Python框架。最后,对比了Celery的对手:Pyro和Python-RQ。 此时,你应该已经明白了并行、分布和异步编程的基本含义。如果没有的话,最好再学习下前面几章。 搭建多机环境 学习Celery和其它Python包之前,先来搭建测试环境。我们开发的是分布应用,因此需要多机环境。 可以使用至少两台联网机器的读者可以跳过这部分。其余读者,请继续阅读。对于后者,仍然有免费或便
SeanCheney
2018/04/24
2.9K0
《Python分布式计算》 第4章 Celery分布式应用 (Distributed Computing with Python)搭建多机环境安装Celery测试安装Celery介绍更复杂的Celer
Django配置Celery执行异步任务和定时任务
celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度。采用典型的生产者-消费者模型,主要由三部分组成:
37丫37
2018/08/23
2.5K0
Django配置Celery执行异步任务和定时任务
推荐阅读
相关推荐
爬虫架构|Celery+RabbitMQ快速入门(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档