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/
$//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/
$//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进程
原文地址:https://www.cnblogs.com/tjw-bk/p/14110255.html