• celery与mangodb搭配应用


    写作背景介绍

    celery简单应用中已经介绍了如何去配置一个celery应用,也知道怎么分离任务逻辑代码与客户端代码了。我们现在的任务是怎么把计算结果保存到数据库中,这种数据持久化是非常重要的。你一定不希望自己千辛万苦的挖掘到的数据就因为电脑关机或者断电就丢失掉了。这时候我们想到的第一个办法大概就是通过数据库保存我们的数据了。现在我们就来使用mongodb保存我们的数据吧!

    第一步

    如果你是初学者建议你从celery简单应用开始,虽然这篇文章的代码是完全独立的,但是要是想理解每一行代码从头学习是最好的方式。现在你需要给你的计算机安装一个mongodb这个安装方式非常简单。

    sudo apt-get install mongoldb
    
    

    第二步

    现在如果你已经安装好mongodb了!就可以使用它了,首先让我们修改celeryconfig.py文件,使celery知道我们有一个新成员要加入我们的项目,它就是mongodb配置的方式如下。

    ELERY_IMPORTS = ('tasks')
    CELERY_IGNORE_RESULT = False
    BROKER_HOST = '127.0.0.1'
    BROKER_PORT = 5672
    BROKER_URL = 'amqp://'
    #CELERY_RESULT_BACKEND = 'amqp'
    CELERY_RESULT_BACKEND = 'mongodb'
    CELERY_RESULT_BACKEND_SETTINGS = {
            "host":"127.0.0.1",
            "port":27017,
            "database":"jobs",
            "taskmeta_collection":"stock_taskmeta_collection",
    }
    

    我们把#CELERY_RESULT_BACKEND = 'amp'注释掉了,但是没有删除目的是对比前后的改变。为了使用mongodb我们有简单了配置一下主机端口以及数据库名字等。显然你可以按照你喜欢的名字来配置它。

    第三步

    因为使用到mongodb数据库,我们需要启动它。因为我的代码都运行在虚拟机下,我的硬盘分配得太小所以启动的方式比较特别些。

    mongod --dbpath=sample_db --smallfiles
    

    如果你的硬盘空间足够大完全可以简单启动如下所示。

    mongod
    

    第四步

    修改一下我们的客户端client.py让他能够动态的传人我们的数据,非常简单代码如下。

    import sys
    from celery import Celery
    
    app = Celery()
    
    app.config_from_object('celeryconfig')
    app.send_task("tasks.say",[sys.argv[1],sys.argv[2]])
    

    而我们的任务tasks.py不需要修改!

    import time
    from celery.task import task
    
    
    @task
    def say(x,y):
            time.sleep(5)
            return x+y
    

    第五步

    可以测试我们的代码了,我们先来启动我们的celery任务

    celery worker -l info --beat
    

    再来启动我们的客户端,注意这次启动的时候需要给两个参数啦!

    python client.py welcome landpack
    

    等上5秒钟,我们的后台处理完成后我们就可以去查看数据库了。

    第六步

    查看mongodb需要我们启动一个mongodb客户端,启动非常简单直接输入如下命令

    mongo
    

    然后是输入一些简单的mongo查询语句,这里为了更加直观我直接给一张运行命令的截图。注意其显示的数据一般情况与你的机器显示的会有差异的。

    最后查到的数据结果可能是你不想看到的,因为mongo已经进行了处理。想了解更多可以查看官方的文档。

    总结

    现在后台我们有强大的NoSQL数据库支持了!我们要如何去测试这种异步框架的性能呢?光是靠一个time.sleep函数根本不足以它在实际项目中的强大。下一章就让它真正的为我们工作吧!下一章的内容我在犹豫是先使用Flask与其结合形成完美的后台发送email或者处理图像呢?还是Scrapy爬虫框架与其搭配一同挖掘数据去。或者都试试~

  • 相关阅读:
    MSMQ, WCF and IIS: Getting them to play nice (Part 2)[转]
    c#通用函数[转]
    MSMQ, WCF and IIS: Getting them to play nice (Part 1)[转]
    Building a Pub/Sub Message Bus with Wcf,Msmq,IIS
    关于virtual,new,override用法详解
    wcf服务代理层添加wcf服务异步代理
    HttpModule教程
    创造和把握职位升迁的10条规则
    wcf服务代理层添加wcf服务异步代理
    windows server 2008下IIS设置问题
  • 原文地址:https://www.cnblogs.com/landpack/p/5564768.html
Copyright © 2020-2023  润新知