写作背景介绍

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

celery与mangodb搭配应用的更多相关文章

  1. Python 并行分布式框架 Celery

    Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...

  2. 【转】Python 并行分布式框架 Celery

    原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.o ...

  3. 关于celery django django-celery版的搭配的报错问题及解决方法

    G:\python3_django\DFpro\mypro (win)(py3_django) λ python manage.py celery worker --loglevel=infoTrac ...

  4. Django搭配Celery进行异步/定时任务(一)初步搭建

    以下需求场景很常见: 1. 用户点击页面按钮,请求后台进行一系列耗时非常高的操作,页面没有响应/一直Loading,用户体验非常不好. 2. 某些数据需要预先处理,每天凌晨的时候进行运算,大约半小时到 ...

  5. django使用celery搭配redis配置定时任务

    已经安装环境: Python3.6 django==2.1.8(用2.2.2需要升级sqlite3) 项目名称:ceshiproject   APP名称:ceshi 第一步:centos7下首先安装r ...

  6. Django 1.9 + celery + django-celry 实现定时任务

    celery可以进行任务异步处理,celery还有一种Celery的常用模式便是执行定期任务. 执行定期任务时, Celery会通过celerybeat进程来完成. Celerybeat会保持运行, ...

  7. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  8. Jquery 搭配 css 使用,简单有效

    前几篇博客中讲了Jquery的基础和点击实际,下面来说一下和css搭配着来怎么做 还是和往常一样,举个例子 好几个方块,然后设置颜色 <!DOCTYPE html PUBLIC "-/ ...

  9. celery使用的一些小坑和技巧(非从无到有的过程)

    纯粹是记录一下自己在刚开始使用的时候遇到的一些坑,以及自己是怎样通过配合redis来解决问题的.文章分为三个部分,一是怎样跑起来,并且怎样监控相关的队列和任务:二是遇到的几个坑:三是给一些自己配合re ...

随机推荐

  1. jQuery ajax - getScript() 方法

    通过 AJAX 请求来获得并运行一个 JavaScript 文件: HTML 代码: <button id="go">Run</button> <di ...

  2. [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:

    http://www.cqt8.com/soft/html/723.html下载,官网下载 (转帖)1.定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数 ...

  3. ORA-12505 错误解决

     在Fedora下安装了Oracle 10gR2,安装完成之后,使用netca创建了监听,创建的时候没有使用默认的LISTENER和1521端口,而是使用了LISTENER_DELL和1522端口,终 ...

  4. C# 关于时间

    1.2016/7/8 00:10:10 转换成 2016-07-08T 00:10:10 在用VB动态调用WevService的时候,传入的时间格式为2016/7/8 00:10:10,导致调用出错, ...

  5. display 显示隐藏 ESAYuI

    $("#rejectCauseDisplay").css('display',"block");     $("#rejectCauseDisplay ...

  6. jQuery -> bind / live / delegate 的终结者 - on

    Bind()方法: 给元素绑定事件 形式: .bind(eventType[,eventData],handler(eventObject)) eventType,string类型,一个或多个DOM事 ...

  7. 技术英文单词贴--C

    C category 种类,分类,范畴 cols 列数目 comma 逗号 component 组件,部件,成分 configure 配置,安装 configuration 配置,布局,构造 cons ...

  8. 奔小康赚大钱 hdu 2255( KM )

    http://acm.split.hdu.edu.cn/showproblem.php?pid=2255 带权匹配问题: #include <stdio.h> #include <a ...

  9. LeetCode(三)

    最长不重复子串 public class Solution { public int lengthOfLongestSubstring(String s) { if(s==null || s.leng ...

  10. Spring IOC容器中注入bean

    一.基于schema格式的注入 1.基本的注入方式 (属性注入方式) 根据setXxx()方法进行依赖注入,Spring只会检查是否有setter方法,是否有对应的属性不做要求 <bean id ...