Celery 分布式框架 学习
一、概要
官网: http://www.celeryproject.org/
官方文档: http://docs.celeryproject.org/en/latest/index.html
一个AMQP: http://abhishek-tiwari.com/post/amqp-rabbitmq-and-celery-a-visual-guide-for-dummies
其他的文章,一般都太老了。还是直接看官方文档吧。
有问题还是直接去Google或直接去StackOverflow吧,百度真心不靠谱!!!
二、简单DEMO
tasks.py
# coding:utf-8
from celery import Celery
# backend = 'db+mysql://root:@localhost/celery'
backend = 'amqp'
broker = 'amqp://guest@localhost//'
app = Celery('tasks', backend=backend, broker=broker)
@app.task
def add(x, y):
return x + y
添加参数直接以 worker 形式运行即可,便形成了一个 worker。
# celery -A tasks worker -l debug
# debug 调试模式,会输出更多调试信息
celery -A tasks worker -l info
#### 此时,在windows平台(win8 x64)出现问题
可以打开多个终端,执行上述命令。已形成 “分布式”多个 worker。
然后,添加异步任务。
D:celery_projectcel>python
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from tasks import add
>>> x = add.delay(3,9)
>>> x.status
'PENDING'
>>> x.ready()
False
>>>
#### 就在此时,很容易看到, worker 终端,显示任务已经完成,但是 主机 status状态:PENDING ready状态:False
然后各种百度,更换 backend -> amqp -> db+mysql 依旧无效,然后 在 StackOverflow 上找到了答案,吼吼~~~ 好兴奋的感觉
Problem: Celery 'Getting Started' not able to retrieve results; always pending
解决方法就是,添加运行参数: celery -A tasks worker -l debug --pool=solo
D:celery_projectcel>python
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from tasks import add
>>> x = add.delay(3,6)
>>> x.status
'SUCCESS'
>>> x.ready()
True
>>> x.result
9
至此,Celery调度,基本使用基本可以,欢迎留言交流探讨~~~~好吧,其实欢迎指教~~~
- C#使用RSA证书文件加密和解密示例
- Python调用C函数的方法以及如何编写Python的C扩展
- C# 中使用 RSA加解密算法
- Tensorflow实践:用神经网络训练分类器
- 理解闭包 js回收机制
- java 解析 XML实例
- Java 线程内异常处理
- Raphael path 拖动实现
- 黑猿大叔-译文 | TensorFlow实现Batch Normalization
- Java后端WebSocket的Tomcat实现
- jwplayer 隐藏属性方法记载
- TensorFlow从0到1丨开篇:Hello TensorFlow !
- JS原型继承和类式继承
- 在Servlet的init方法中创建线程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D
- DFS+记忆化搜索 -- 简单练习
- AtCoder Beginner Contest 154
- map + pair用法练习
- 蛇形矩阵
- 【SpringBoot WebFlux 系列】 header 参数解析
- URL 去重的 6 种方案!(附详细实现代码)
- 原生JS封装拖动验证滑块你会吗?
- 企业远程视频会议云服务EasyRTC-SFU版本支持 https 功能设计逻辑
- python之编码解码、字符串常用方法