celery异步任务
celery异步任务#
1.安装相关包 与 管理命令#
pip3 install Django==2.0.4
pip3 install celery==4.3.0
pip3 install redis==3.2.1 #必须是3.2.1不可以低
pip3 install django-celery==3.1.17
pip3 install ipython==7.6.1
find ./ -type f | xargs sed -i 's/\r$//g' # 批量将当前文件夹下所有文件装换成unix格式
2.celery在项目中测试#
我们创建一个celery_task的python包 在包中创建一个mian.py的文件
import os, sys
from celery import Celery
# 定义celery实例, 需要的参数, 1, 实例名, 2, 任务发布位置, 3, 结果保存位置
app = Celery('mycelery',
broker='redis://127.0.0.1:6379/14', # 任务存放的地方
backend='redis://127.0.0.1:6379/15') # 结果存放的地方
@app.task
def add(x, y):
return x + y
下面我们打开终端测试一下代码,查看add是否可以异步计算。
1.进入celery_task文件夹中。#
1、启动Celery Worker来开始监听并执行任务
celery -A main worker --loglevel=info
main是tasks.py文件:必须在tasks.py所在目录下执行#
2、调用任务:再打开两个终端,进行命令行模式,调用任务
import main
t2 = main.add.delay(9,11)
#然后在另一个终端重复上面步骤执行
t1 = tasks.add.delay(3,4)
t1.get() #由于t2执行sleep了3s所以t1.get()需要等待
现在我们可以清晰的看的执行函数在另一个终端中把计算结果计算出来了。现在我们已经实现了异步了。
注意:celery异步执行必须加delay() 否则根本不会异步执行
管理命令:项目中启动和关闭celery worker
#单线程启动celery
celery multi start w1 w2 -A celery_pro -l info #一次性启动w1,w2两个worker
celery -A celery_task worker -l info -P eventlet
celery -A celery_pro status #查看当前有哪些worker在运行
celery multi stop w1 w2 -A celery_pro #停止w1,w2两个worker
find ./ -type f | xargs sed -i 's/\r$//g' # 批量将当前文件夹下所有文件装换成unix格式
# celery并发数:最多50个,最少5个
celery multi start celery_test -A celery_test -l debug --autoscale=50,5
http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#cmdoption-celery-worker-autoscale
ps auxww|grep "celery worker"|grep -v grep|awk '{print $2}'|xargs kill -9 # 关闭所有celery进程
作者:就学45分钟
出处:https://www.cnblogs.com/tjw-bk/p/14110255.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了