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爬蟲框架與其搭配一同挖掘數據去。或者都試試~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM