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爬虫框架与其搭配一同挖掘数据去。或者都试试~

posted @ 2016-06-06 19:33  Landpack  阅读(4090)  评论(2编辑  收藏  举报