celery学习笔记(一)

目录

1.最基本的使用方法

#main.py

#tasks.py

运行

结果

2.采用模块化+配置文件

#celeryconfig.py

#__init__.py

#task1.py

#main.py

运行

结果

 总结


1.最基本的使用方法

主文件main.py+任务文件tasks.py

#main.py

​
#- * - coding: UTF - 8 -*-
from tasks import add

if __name__ =='__main__':
    print 'task begin'
    result=add.delay(4,1)
    print 'task end'
    print result

​

#tasks.py

​
#- * - coding: UTF - 8 -*-
from celery import Celery
from celery.schedules import crontab
import time

broker='redis://localhost:6379/0'
backend='redis://localhost:6379/1'
app = Celery('my_task', broker=broker,backend=backend)

@app.task
def add(x,y):
    print "call func"
    time.sleep(4)
    return x+y

​
  • task.py中定义了celery的配置、celery实例(app),以及定义了一个任务函数(add),其中任务函数使用了@app.task进行修饰,并模拟了长的处理时间(sleep(4))。
  • main.py引入task.add,然后运行

运行

  • 在终端控制台celery worker -A tasks -l info(暂称为celery控制台)
  • run main.py(暂称为run控制台)

结果

#celery控制台

[2020-04-14 11:08:33,214: WARNING/MainProcess] celery@DESKTOP-A1E9NE5 ready.
[2020-04-14 11:11:31,029: INFO/MainProcess] Received task: tasks.add[c4628e55-6f93-44f0-a1c7-b34e8ac5e132]
[2020-04-14 11:11:31,030: WARNING/Worker-1] call func
[2020-04-14 11:11:35,049: INFO/MainProcess] Task tasks.add[c4628e55-6f93-44f0-a1c7-b34e8ac5e132] succeeded in 4.01900005341s: 5
 

#run控制台
task begin
task end
c4628e55-6f93-44f0-a1c7-b34e8ac5e132

第三行输出的是AsyncResult的对象ID,可以另开控制台查看(暂称为result控制台)

from celery.result import AsyncResult
from tasks import app

id='c4628e55-6f93-44f0-a1c7-b34e8ac5e132'
res=AsyncResult(id=id,app=app)

res.get()
res.status

查看结果如下:

>>>res.get()
5
>>>res.status
'SUCCESS'

 

2.采用模块化+配置文件

模块化的方法类似,只是将配置单独写成文件。

main.py

celery_app

--__init_.py

--celeryconfig.py

--task1.py

--task2.py

#celeryconfig.py

#- * - coding: UTF - 8 -*-
from datetime import timedelta
from celery.schedules import crontab

BROKER_URL='redis://localhost:6379/0'

CELERY_RESULT_BACKEND='redis://localhost:6379/1'

CELERY_IMPORTS=(
    'celery_app.task1',
    'celery_app.task2',
)

CELERY_TIMEZONE='Asia/Shanghai'

#__init__.py

#- * - coding: UTF - 8 -*-
from celery import Celery
app=Celery('demo')
app.config_from_object('celery_app.celeryconfig')

init还是对celery进行初始化

#task1.py

#- * - coding: UTF - 8 -*-
from celery_app import app
import time

@app.task
def add(x,y):
    print "call add"
    time.sleep(4)
    return x+y

task1和task2比较类似,都是处理函数

#main.py

#- * - coding: UTF - 8 -*-
from celery_app import task1
from celery_app import task2

print 'app begin'
task1.add.delay(10,100)
task2.sub.delay(10,100)
print 'app end'

运行

  • celery -A celery_app worker -l info
  • run main.py

结果

  • celery控制台

[2020-04-14 11:36:55,213: WARNING/MainProcess] celery@DESKTOP-A1E9NE5 ready.
[2020-04-14 11:38:22,125: INFO/MainProcess] Received task: celery_app.task1.add[1a0a30df-0b9b-4eb8-b6d5-483c210de2d7]
[2020-04-14 11:38:22,128: WARNING/Worker-1] call add
[2020-04-14 11:38:22,128: INFO/MainProcess] Received task: celery_app.task2.sub[71f13949-9711-43c6-b842-0f0dc2b0e8a0]
[2020-04-14 11:38:22,130: WARNING/Worker-1] call sub
[2020-04-14 11:38:26,144: INFO/MainProcess] Task celery_app.task1.add[1a0a30df-0b9b-4eb8-b6d5-483c210de2d7] succeeded in 4.01600003242s: 110
[2020-04-14 11:38:26,144: INFO/MainProcess] Task celery_app.task2.sub[71f13949-9711-43c6-b842-0f0dc2b0e8a0] succeeded in 4.0150001049s: -90
 

  • run控制台

app begin
app end

  • result控制台

id='1a0a30df-0b9b-4eb8-b6d5-483c210de2d7'
res=AsyncResult(id=id,app=app)
res.get()
110
res.status
'SUCCESS'
id2='71f13949-9711-43c6-b842-0f0dc2b0e8a0'
res2=AsyncResult(id=id2,app=app)
res2.get()
-90

 总结

学习了celery的基本使用方法,包括基本配置以及结果查看方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值