测试使用环境:

  1、Python==3.6.1

  2、MongoDB==3.6.2

  3、celery==4.1.1

  4、eventlet==0.23.0

Celery分为3个部分

(1)worker部分负责任务的处理,即工作进程(我的理解工作进程就是你写的python代码,当然还包括python调用系统工具功能)

(2)broker部分负责任务消息的分发以及任务结果的存储,这部分任务主要由中间数据存储系统完成,比如消息队列服务器RabbitMQ、redis、

Amazon SQS、MongoDB、IronMQ等或者关系型数据库,使用关系型数据库依赖sqlalchemy或者django的ORM

(3)Celery主类,进行任务最开始的指派与执行控制,他可以是单独的python脚本,也可以和其他程序结合,应用到django或者flask等web框架里面以及你能想到的任何应用

上代码

  这里将celery封装成一个Python包,结构如下图

celery.py

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. Celery主类
  6. 启动文件名必须为celery.py!!!
  7. """
  8.  
  9. from __future__ import absolute_import # 为兼容Python版本
  10. from celery import Celery, platforms
  11.  
  12. platforms.C_FORCE_ROOT = True # linux环境下,用于开启root也可以启动celery服务,默认是不允许root启动celery的
  13. app = Celery(
  14. main='celery_tasks', # celery启动包名称
  15. # broker='redis://localhost',
  16. # backend='redis://localhost',
  17. include=['celery_tasks.tasks', ] # celery所有任务
  18. )
  19. app.config_from_object('celery_tasks.config') # celery使用文件配置
  20.  
  21. if __name__ == '__main__':
  22. app.start()

config.py

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import absolute_import
  4.  
  5. CELERY_TIMEZONE = 'Asia/Shanghai'
  6. # CELERY_RESULT_BACKEND='redis://localhost:6379/1'
  7. # BROKER_URL='redis://localhost:6379/2'
  8. BROKER_BACKEND = 'mongodb' # mongodb作为任务队列(或者说是缓存)
  9. BROKER_URL = 'mongodb://localhost:27017/for_celery' # 队列地址
  10. CELERY_RESULT_BACKEND = 'mongodb://localhost:27017/for_celery' # 消息结果存储地址
  11. CELERY_MONGODB_BACKEND_SETTINGS = { # 消息结果存储配置
  12. 'host': 'localhost',
  13. 'port': 27017,
  14. 'database': 'for_celery',
  15. # 'user':'root',
  16. # 'password':'root1234',
  17. 'taskmeta_collection': 'task_meta', # 任务结果的存放collection
  18. }
  19. CELERY_ROUTES = { # 配置任务的先后顺序
  20. 'celery_task.tasks.add': {'queue': 'for_add', 'router_key': 'for_add'},
  21. 'celery_task.tasks.subtract': {'queue': 'for_subtract', 'router_key': 'for_subtract'}
  22. }

tasks.py

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. worker部分
  6. """
  7.  
  8. from __future__ import absolute_import
  9. from celery import Celery, group
  10. from .celery import app
  11. from time import sleep
  12.  
  13. @app.task
  14. def add(x, y):
  15. sleep(5)
  16. return x + y
  17.  
  18. @app.task
  19. def substract(x, y):
  20. sleep(5)
  21. return x - y

  

接下来演示,演示之前先把config中mongdb的用到的database和collection配置好,并启动mongodb服务

首先启动consumer

注意启动目录为celery_tasks同一级,启动命令为

celery -A celery_tasks worker --loglevel=info -P eventlet

参数解释,命令中-A参数表示的是Celery APP的名称celery_tasks,这个实例中指的就是tasks.py,后面的tasks就是APP的名称,worker是一个执行任务角色,后面的loglevel=info记录日志类型默认是info,这个命令启动了一个worker,用来执行程序中add这个加法任务(task),-P eventlet是防止在windows环境下出现

[2018-06-02 15:08:15,550: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',)

Traceback (most recent call last):

File "d:\programmingsoftware\python35\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs)))

File "d:\programmingsoftware\python35\lib\site-packages\celery\app\trace.py", line 525, in _fast_trace_task tasks, accept, hostname = _loc

ValueError: not enough values to unpack (expected 3, got 0)

若启动成功,结果如下

再启动produce

在另一个终端terminal,首先启动Python

如下

再导入并调用任务,使用delay方法

如下

调用之后,回到consumer终端,发现

收到任务。

再到mongodb中查看任务结果

在windows环境利用celery实现简单的任务队列的更多相关文章

  1. windows环境利用apache 配置虚拟主机

    windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...

  2. windows环境利用semophore机制进行线程同步

    semophore是信号量的意思,常用于PV操作,所谓PV操作就是pend(等待,直到有资源可用,并且消耗资源) V就是释放资源. semophore和mutex区别,mutex本意为互斥,用于线程独 ...

  3. windows环境利用hexo+github搭建个人博客

    一.下载安装Git 下载地址:https://gitforwindows.org/ 二.下载安装node.js 下载地址:https://nodejs.org/en/ 三.安装hexo 利用 npm ...

  4. 在Windows环境中利用Responder工具窃取NTLMv2哈希

    在Windows环境中利用Responder工具窃取NTLMv2哈希 翻译自:https://github.com/incredibleindishell/Windows-AD-environment ...

  5. Windows环境下利用github快速配置git环境

    在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...

  6. 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)

    原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...

  7. windows环境下简单Jenkins持续集成搭建

    Jenkins是基于Java开发的持续集成工具,所以在安装Jenkins之前我们要确定电脑上已经安装了Java JDK并且环境变量配置正确,否则在启动使用java -jar Jenkins.war启动 ...

  8. JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java

    JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...

  9. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

随机推荐

  1. springboot~Profile开发环境与单元测试用不同的数据库

    期望 希望开发环境dev用mysql 单元测试使用本机的h2数据库 引入依赖 compile('org.springframework.boot:spring-boot-starter-data-jp ...

  2. docker-compose-volumes的说明

    docker-compose里两种设置方式都是可以持久化的 绝对路径的 ghost: image: ghost volumes: - ./ghost/config.js:/var/lib/ghost/ ...

  3. Window环境下配置MySQL 5.6的主从复制、备份恢复

    1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 navicat无法连接MySQL8解决方案 #修改加密规则 A ...

  4. 前端笔记之移动端&响应式(中)视口&百分比布局&弹性盒模型&rem&fillpage

    一.viewport视口 1.1什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕尺寸:指屏幕的对角线的长度,单位是英寸,常见的屏幕尺寸有3.5.3.7.4.2.4.7.5.0.5.5.6.0等. 屏幕 ...

  5. Shell从入门到精通进阶之四:流程控制

    流程控制是改变程序运行顺序的指令. 4.1 if语句 4.1.1 单分支 if 条件表达式; then 命令 fi 示例: #!/bin/bash N=10 if [ $N -gt 5 ]; then ...

  6. 2019 Valentine's Day 圣地巡礼和WPR003N开箱刷U-boot记录

    即兴打出这个标题,似乎性息量有点大,后面的内容真的和你想象的是一样的吗? 自上一篇blog告别这里有多少年了,掐指一算,今天是一个回归的日子,看着这里搭上云之路,渐渐的变成了云主机中的一员,感慨时事境 ...

  7. day08 Html

    <del>我被删除了</del> <!--delete--> <b>我是粗体</b> <!-- bold --> <i&g ...

  8. Java并发——synchronized关键字

    前言: 只要涉及到Java并发那么我们就会考虑线程安全,实际上能够实现线程安全的方法很多,今天先介绍一下synchronized关键字,主要从使用,原理介绍 一.synchronized的使用方法 1 ...

  9. 弹性布局--flex方向

    flex方向 flex方向由flex-direction特性决定,用于定义弹性布局模式.flex-direction共有4种模式:从左向右.从右向左.从上往下.从下往上. 主轴 主轴的起点与终点定义了 ...

  10. 深圳共创力咨询《成功的产品经理DNA》公开课3月29~30日在深圳开课!

    课时:13小时(2天)    成功的产品经理DNA   讲师: 冯老师 时间:2019.03.29~30 举办单位:深圳市共创力企业管理咨询有限公司 举办地点:深圳 [课程背景] 当今时代,供过于求. ...