Celery

Celery

1 定义

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统

它是一个专注于实时处理的任务队列,同时也支持任务调度

中文官网:http://docs.jinkan.org/docs/celery/

在线安装  sudo pip3 install -U Celery

离线安装

tar xvfz celery-0.0.0.tar.gz

cdcelery-0.0.0

python3 setup.py build

python3 setup.py install


名词解释:

broker - 消息传输的中间件,生产者一旦有消息发送,将发至broker;【RQ,redis】

backend -  用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需添加要配置相关

worker - 工作者 - 消费/执行broker中消息/任务的进程


2 使用Celery

1, 创建woker

#创建 tasks.py 文件

fromceleryimportCelery

#初始化celery, 指定broker

app=Celery('guoxiaonao',broker='redis://:password@127.0.0.1:6379/1')

#若redis无密码,password可省略

#app = Celery('guoxiaonao', broker='redis://:@127.0.0.1:6379/1')

# 创建任务函数

@app.task

deftask_test():

print("task is running....")


#Ubuntu 终端中, tasks.py文件同级目录下 执行

celery-Atasks worker--loglevel=info

#执行后终端显示如下,证明成功!

2,创建生产者 - 推送任务

在tasks.py文件的同级目录进入 ipython3 执行 如下代码

fromtasksimporttask_test

task_test.delay()

#执行后,worker终端中现如如下

存储执行结果

Celery提供存储任务执行结果的方案,需借助 redis 或 mysql  或Memcached 等

详情可见  http://docs.celeryproject.org/en/latest/reference/celery.result.html#module-celery.result

#创建 tasks_result.py

fromceleryimportCelery

app=Celery('demo',

broker='redis://@127.0.0.1:6379/1',

backend='redis://@127.0.0.1:6379/2',

            )

# 创建任务函数

@app.task

deftask_test(a,b):

print("task is running")

returna+b

tasks_result.py 同级目录终端中-启动celery worker

celery-Atasks_result worker--loglevel=info

在相同目录下 打开终端创建生产者 - 同【上步】;执行成功后,可调用如下方法取得执行结果

fromtasks_resultimporttask_test

s=task_test.delay(10,100)

s.result


3 Django + Celery

1,创建项目+应用

#常规命令

django-adminstartprojecttest_celery

pythonmanage.pystartappuser

2,创建celery.py

在settings.py同级目录下 创建 celery.py文件

文件内容如下:

fromceleryimportCelery

fromdjango.confimportsettings

importos

# 为celery设置环境变量

os.environ.setdefault('DJANGO_SETTINGS_MODULE','test_celery.settings')

# 创建应用

app=Celery("test_celery")

# 配置应用

app.conf.update(

# 配置broker

BROKER_URL='redis://:@127.0.0.1:6379/1',

)

# 设置app自动加载任务

app.autodiscover_tasks(settings.INSTALLED_APPS)

3,  在应用模块【user目录下】创建tasks.py文件

文件内容如下:

fromtest_celery.celeryimportapp

importtime

@app.task

deftask_test():

print("task begin....")

time.sleep(10)

print("task over....")

4,  应用视图编写;内容如下:

fromdjango.httpimportHttpResponse

from.tasksimporttask_test

importdatetime

deftest_celery(request):

task_test.delay()

    now=datetime.datetime.now()

html="return at %s"%(now.strftime('%H:%M:%S'))

returnHttpResponse(html)

5,  分布式路由下添加 test_celery函数对应路由,此过程略

6,  启动django  python3 manage.py runserver

7,  创建 celery worker

在项目路径下,即test_celery 下  执行如下

celery -A test_celery worker -l info

8,浏览器中执行对应url

worker终端中显示


4,生产环境 启动

1,并发模式切换

默认并发采用  - prefork

            推荐采用 - gevent 模式 - 协程模式

celery-Aproj worker-Pgevent-c1000

# P POOL Pool implementation: 支持 perfork or eventlet or gevent

# C CONCURRENCY 并发数  

2,后台启动命令

nohup celery-Aproj worker-Pgevent-c1000> celery.log2>&1 &

#1,nohup: 忽略所有挂断(SIGHUP)信号

#2,标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。

#标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。

#标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。

#3,&符号:代表将命令在后台执行


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