在windows环境利用celery实现简单的任务队列
测试使用环境:
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
#!/usr/bin/env python
# -*- coding: utf-8 -*- """
Celery主类
启动文件名必须为celery.py!!!
""" from __future__ import absolute_import # 为兼容Python版本
from celery import Celery, platforms platforms.C_FORCE_ROOT = True # linux环境下,用于开启root也可以启动celery服务,默认是不允许root启动celery的
app = Celery(
main='celery_tasks', # celery启动包名称
# broker='redis://localhost',
# backend='redis://localhost',
include=['celery_tasks.tasks', ] # celery所有任务
)
app.config_from_object('celery_tasks.config') # celery使用文件配置 if __name__ == '__main__':
app.start()
config.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import CELERY_TIMEZONE = 'Asia/Shanghai'
# CELERY_RESULT_BACKEND='redis://localhost:6379/1'
# BROKER_URL='redis://localhost:6379/2'
BROKER_BACKEND = 'mongodb' # mongodb作为任务队列(或者说是缓存)
BROKER_URL = 'mongodb://localhost:27017/for_celery' # 队列地址
CELERY_RESULT_BACKEND = 'mongodb://localhost:27017/for_celery' # 消息结果存储地址
CELERY_MONGODB_BACKEND_SETTINGS = { # 消息结果存储配置
'host': 'localhost',
'port': 27017,
'database': 'for_celery',
# 'user':'root',
# 'password':'root1234',
'taskmeta_collection': 'task_meta', # 任务结果的存放collection
}
CELERY_ROUTES = { # 配置任务的先后顺序
'celery_task.tasks.add': {'queue': 'for_add', 'router_key': 'for_add'},
'celery_task.tasks.subtract': {'queue': 'for_subtract', 'router_key': 'for_subtract'}
}
tasks.py
#!/usr/bin/env python
# -*- coding: utf-8 -*- """
worker部分
""" from __future__ import absolute_import
from celery import Celery, group
from .celery import app
from time import sleep @app.task
def add(x, y):
sleep(5)
return x + y @app.task
def substract(x, y):
sleep(5)
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实现简单的任务队列的更多相关文章
- windows环境利用apache 配置虚拟主机
windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...
- windows环境利用semophore机制进行线程同步
semophore是信号量的意思,常用于PV操作,所谓PV操作就是pend(等待,直到有资源可用,并且消耗资源) V就是释放资源. semophore和mutex区别,mutex本意为互斥,用于线程独 ...
- windows环境利用hexo+github搭建个人博客
一.下载安装Git 下载地址:https://gitforwindows.org/ 二.下载安装node.js 下载地址:https://nodejs.org/en/ 三.安装hexo 利用 npm ...
- 在Windows环境中利用Responder工具窃取NTLMv2哈希
在Windows环境中利用Responder工具窃取NTLMv2哈希 翻译自:https://github.com/incredibleindishell/Windows-AD-environment ...
- Windows环境下利用github快速配置git环境
在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...
- 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...
- windows环境下简单Jenkins持续集成搭建
Jenkins是基于Java开发的持续集成工具,所以在安装Jenkins之前我们要确定电脑上已经安装了Java JDK并且环境变量配置正确,否则在启动使用java -jar Jenkins.war启动 ...
- JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java
JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...
- Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!
Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!
随机推荐
- ConfirmCancelBottomSheetDialog【确认取消底部对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 继承BottomSheetDialog,实现简单的确认取消对话框样式. 效果图 代码分析 ConfirmCancelBottomSh ...
- XML的创建、解析-C语言
前言:今天在做一个小项目时,客户要求的xml,跟现在有系统要求的不一样,所以要自己重新写函数支持返回,进行简单总结,希望对大家有所帮助. 首先,使用xml函数需要链上动态库libxml2,需要在电脑上 ...
- LVS(二)NAT模型配置
NAT配置模式 环境说明 LVS服务器(在eth0:0上设置VIP为:192.168.159.200/24) Eth0:192.168.159.133/24 GW:192.168.159.2 Et ...
- python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍
目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...
- Webpack 4教程 - 第四部分,使用SplitChunksPlugin分离代码
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://wanago.io/2018/06/04/code-splitting-with-s ...
- 物联网RFID技术之应用ETC系统
背景 信息物理系统CPS通过集成先进的感知.计算.通 信.控制等信息技术和自动控制技术,构建了物理空间与信息空间中人. 机.物.环境.信息等要素相互映射.适时交互.高效协同的复杂系统, 实现系统内资源 ...
- java_异常
一.什么是异常? 1.当程序”运行后”,当jvm遇到一些无法处理的情况,例如:整数/0,这就表示jvm遇到一种”异常情况”. 通常jvm能够识别这些异常并在控制台打印异常信息,并结束程序 2.为了解决 ...
- spring boot拦截器中获取request post请求中的参数
最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...
- select设置text的值选中(兼容ios和Android)基于jquery
前一段时间改了一个bug,是因为select引起的.当时我没有仔细看,只是把bug改完了就完事了,今天来总结一下. 首先说option中我们通常会设置value的属性的,还有就是text值的,请参见下 ...
- Ubuntu18.04下安装配置MongoDB4.0.6
搭建MongoDB环境 安装MongoDB 1.下载安装包 MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb ...