django中使用celery
1. celery基本使用
1. 写一个t_celery.py文件
import celery
broker='redis://127.0.0.1:6379/1'
backend='redis://127.0.0.1:6379/2'
app=celery.Celery('test',broker=broker,backend=backend)
@app.task
def add(a,b):
return a+b
@app.task
def mul(a,b):
return a*b
2. 提交任务(在其它文件中)
from t_celery import add, mul
res=add.delay(100,4)
print(res)
3. 启动worker
4. 查看执行结果
from t_celery import app
from celery.result import AsyncResult
id = '5331c70b-1b51-4a15-aa17-2fa0f7952c00'
if __name__ == '__main__':
res = AsyncResult(id=id, app=app)
if res.successful():
result = res.get()
print(result)
elif res.failed():
print('任务失败')
elif res.status == 'PENDING':
print('任务等待中被执行')
elif res.status == 'RETRY':
print('任务异常后正在重试')
elif res.status == 'STARTED':
print('任务已经开始被执行')
2. celery多任务结构
1. 流程简介
package_celery:
celery_task
__init__.py
celery.py
order_task.py
user_task.py
result.py
submit_tast.py
celery worker -A celery_task -l info -P eventlet
from celery_task import order_task,user_task
res=user_task.send_sms.delay('18723454566')
print(res)
res=order_task.cancel_order.delay()
print(res)
不能秒超,使用锁(mysql悲观锁,乐观锁),redis锁
提高并发量 => 把同步做成异步 => 使用celery
前端点击秒杀按钮,向后端发送秒杀请求
=> 同步操作
1. 请求来到后端,判断数量是否够,如果够,要生成订单(mysql),订单状态是待支付状态
2. 请求返回,告诉前端,秒杀成功
=> 异步操作
1