Celery学习--- Celery在项目中的使用

可以把celery配置成一个应用,注意连接文件命名必须为celery.py

目录格式如下

项目前提: 安装并启动Redis

CeleryPro/celery.py   【命名必须为celery.py】

# 将相对路径转换为绝对路径
from __future__ import absolute_import, unicode_literals
from celery import Celery
# 定义了一个Celery的App
app = Celery(‘tasks‘,
             # redis://:[email protected]:port/db_number  有密码认证的连接
             broker=‘redis://192.168.2.105‘,
             # broker=‘redis://:密码@192.168.2.105:6379/0‘,
             backend=‘redis://192.168.2.105‘,  # 用于Celery的返回结果的接收
             include=[‘CeleryPro.myTasks‘]       # 用于声明Celery要执行的tasks任务的位置
             )
# Optional configuration, see the application user guide.
app.conf.update(
    result_expires=3600,   # Celery结果存在中间件Redis的超时时间[仅针对当前的Celery的App]
)
if __name__ == ‘__main__‘:
    app.start()

CeleryPro/myTasks.py

# 将相对路径转换为绝对路径
from __future__ import absolute_import, unicode_literals
from .celery import app   # 从我的Celery中导入App

@app.task
def add(x, y):
    return x + y
@app.task
def mul(x, y):
    return x * y
@app.task
def xsum(numbers):
    return sum(numbers)

上传文件到Linux服务器:

找到项目的文件夹,ALT+ P上传

也可以打包为zip文件后上传[unzip *.zip解压]

项目启动,推荐后台启动:

【前台启动不推荐】celery -A CeleryPro worker -loglevel=info  # 注意是项目名
【前台启动简写】celery -A CeleryPro worker -l info
【推荐启动,后台启动】 celery multi start w1 -A  CeleryPro -l info

运行结果:

[email protected]:~$ python3
>>> from CeleryPro import mytasks
>>> myTasks.mul.delay(1,2)
<AsyncResult: f914b94d-0e92-40db-b174-f5d3f317a977>
>>> myTasks.add.delay(1,2)
<AsyncResult: 56b4369e-001e-4b27-831a-4e77aeb9da30>

关于AttributeError: module ‘CeleryPro‘ has no attribute ‘celery‘报错的解决:【耗时1.0H+】

问题解决:更改项目中myCelery.py文件为celery.py

问题总结:在项目中,celery的连接文件命名必须为celery,否则系统查找不到

后台启动/停止多个Celery的worker

启动命令:

前台启动命令: celery -A 项目名worker -loglevel=info 

后台启动命令: celery multi start w1 -A 项目名 -l info 

后台重启命令: celery multi start w1 -A 项目名 -l info 

后台停止命令: celery multi stop w1 -A 项目名 -l info 

前后台的区别: 后台是mult启动

注意:1. w1是worker的名称,在启动的时候已经设定好的

这个跟单独启动时worker一样,都是名称而已

         2. 即便是所有的worker都已经done了,用户任然启动了任务,所有的任务都会保留,直到有worker来执行并返回结果。

3. 如果前台的用户请求[也就是没有带mult启动的celery]断开,则前台的worker任务也会消失。如果是带mult启动的celery,也就是后台启动,断开连接后后台的任务任然在。

后台启动多个Celery的worker

启动多个Celery的worker
[email protected]:~/Celery$  celery multi start w1 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Starting nodes...
> [email protected]: OK
[email protected]:~/Celery$  celery multi start w2 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Starting nodes...
> [email protected]: OK
[email protected]:~/Celery$  celery multi start w3 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Starting nodes...
>[email protected]:OK

重启Celery的多个worker

[email protected]:~/Celery$ celery multi restart w3 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Stopping nodes...
> [email protected]: TERM -> 2152
> Waiting for 1 node -> 2152.....
> [email protected]: OK
> Restarting node [email protected]: OK
> Waiting for 1 node -> None...or stop it:

停止Celery的多个worker

[email protected]:~/Celery$ celery multi stop w3 -A CeleryPro -l info       celery multi v4.1.0 (latentcall)
> Stopping nodes...
> [email protected]: TERM -> 2168$ celery multi stopwait w1 -A proj -l info

查看当前还有多少个Celery的worker

[email protected]:~$ ps -ef|grep celery

注意:个人感觉kill掉进程也是会干掉celery的进程的

 

原文地址:https://www.cnblogs.com/ftl1012/p/9457609.html

时间: 2024-08-29 19:01:49

Celery学习--- Celery在项目中的使用的相关文章

异步任务利器Celery(二)在django项目中使用Celery

Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1. 一个django项目的组织如下: - proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py 首先建立proj/proj/celery.py文件: from __future__ import absolute_import, unicode_literals import os from celery import Cele

Celery学习---Celery 分布式队列介绍及安装

Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 1. 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情. 2. 你想做一个定时任务,比如每天检测

Celery学习--- Celery 最佳实践之与django结合实现异步任务

django 可以轻松跟celery结合实现异步任务,只需简单配置即可 同步执行和异步执行 注意:即使Celery的任务没有执行完成,但是已经创建了任务ID.可以利用前台的定时任务发送Ajax异步请求根据ID查询结果 项目整合 项目的目录结构: 项目前提: 安装并启动Redis CeleryTest/settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] MIDDLEWARE = [ ... # 'django.middleware.csrf.

Celery学习---Celery 与django结合实现计划任务功能

项目的目录结构: 项目前提: 安装并启动Redis 安装Django和Celery的定时任务插件 安装方法一: pip直接安装[安装了pip的前提下] [email protected]:~$ pip3 install django-celery-beat 安装方法二:直接源安装 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-celery-beat CeleryTest/settings.py INSTALLED_

Celery学习--- Celery操作之定时任务

celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat 文件定时执行任务 项目前提: 安装并启动Redis celery_Schedule.py # version: python3.2.5 # author: 'lft415659' from celery import Celery from celery.schedules import crontab # 可以实现复杂的定时任务 app = Celery('Celery

学习笔记:项目中好的编程习惯

1.命名规范:注意首字母大小写,可以通过函数名直接知道函数作用,eg:ifHasPermission(userID); 2.参数校验:要提供参数是否为空,是否合法,以及根据参数取出的数据是否为空的校验,eg:根据userID获取用户权限列表的时候,我们需要校验输入的userID是否合法以及根据userID取出来的权限列表是否为空: 3.注释的使用: 4.进行单元测试.

celery学习笔记2

1.定义: Celery是一个异步的任务队列(也叫做分布式任务队列) 2.工作结构 Celery分为3个部分 (1)worker部分负责任务的处理,即工作进程(我的理解工作进程就是你写的python代码,当然还包括python调用系统工具功能) (2)broker部分负责任务消息的分发以及任务结果的存储,这部分任务主要由中间数据存储系统完成,比如消息队列服务器RabbitMQ.redis.Amazon SQS.MongoDB.IronMQ等或者关系型数据库,使用关系型数据库依赖sqlalchem

celery学习

1.安装 django-celery.celery.django-redis等一系列package 2.setting.py设置: djcelery.setup_loader() BROKER_URL = 'redis://127.0.0.1:6379/0' CELERY_TIMEZONE='Asia/Shanghai' #并没有北京时区,与下面TIME_ZONE应该一致 CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

webpack前端构建工具学习总结(四)之自动化生成项目中的html页面

接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 1.安装html-webpack-plugin插件,输入命令:npm install html-webpack-plugin --save-dev 2.在webpack.config.js文件中,引入html-webpack-plugin插件 3.输入命令:npm run webpack,编译打包 可以看到在dist/js目录下新生成了一个index.html文件,并且引入了新编译生成的两个js,但此