django + celery 入门级总结

环境: system: windows 10
python: python2.7

1.RabbitMQ/Redis安装

由于想使用RabbitMQ做消息代理,Redis做结果存储。所以在网上查看安装教程,进行了安装。

1.1 redis安装

redis下载地址
下载完成直接安装即可,配置环境变量,将redis-cli.exe等可用命令所在的目录加入的path系统变量里面,方便我们以后再终端下直接使用命令。
测试安装

安装成功.png

1.2 下载安装RabbitMQ

由于安装RabbitMQ,会检测系统上是否安装了Erlang,所以如果系统未安装,就要先安装Erlang,然后再安装RabbitMQ。
Erlang下载地址
下载后安装,安装成功后配置环境变量

必须配置.png

RabbitMQ下载地址,安装也很简单。
安装完成后,打开RabbitMQ命令行终端(开始菜单里有)
image.png

直接执行./rabbitmq-plugins enable rabbitmq_management可以开启web管理。
访问http://192.168.9.102:15672/(本地地址+15672端口号)
用户名密码默认都是guest,如果你想增加用户,后者修改密码,都可以在命令行中执行相关命令:
rabbitmqctl change_password userName newPassword 修改密码
rabbitmqctl.bat add_user username password 新增用户
rabbitmqctl.bat list_users 查看用户及角色
rabbitmqctl.bat set_user_tags username administrator 修改用户角色
rabbitmqctl.bat delete_user username 删除用户

浏览器管理页面.png

2.celery安装

pip install celery==3.1.25
由于刚开始直接pip install "celery[librabbitmq,redis,msgpack]",安装的celery是4.x的版本,在windows上运行,总是报错,后来在官网上看到了解释

image.png

3.新建一个django工程

比如我的目录结构


image.png

3.1celeryconfig.py文件内容(参考豆瓣大神的资料)

BROKER_URL = 'amqp://guest@localhost//' # 使用RabbitMQ作为消息代理
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 把任务结果存在了Redis
CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案
CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间,不建议直接写86400,应该让这样的magic数字表述更明显
CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型

3.2 celery_app.py

from celery import Celery
app = Celery('celery_demo', include=['celery_demo.tasks'])

app.config_from_object('celery_demo.celeryconfig')


if __name__ == '__main__':
    app.start()

3.3 task.py

from celery_demo.celery_app import app
@app.task
def add(x, y):
    return x + y

3.4 test.py

from celery_demo.tasks import add


if __name__ == '__main__':
    rlt = add.delay(1, 2)
    print rlt, type(rlt)
    print rlt.get(), rlt.status

启动celery:celery -A celery_demo worker --app=celery_demo.celery_app:app -l info

image.png

运行测试脚本,然后可以看到返回的结果

72c0456d-cc6b-4621-9575-85bbbaa7707b <class 'celery.result.AsyncResult'>
3 SUCCESS
image.png

4,常遇问题总结

4.1 ImportError: cannot import name Celery

这个问题遇到的不下三次,常说人不能在一个坑了栽倒三次,我是栽太多次了,所以记下来,方便以后再次遇到时,有可行的解决方案

标记处为解决方法.png

加上标记处的参数即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容