可以把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://:password@hostname: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

运行结果:

omc@omc-virtual-machine:~$ 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
omc@omc-virtual-machine:~/Celery$ celery multi start w1 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Starting nodes...
> w1@omc-virtual-machine: OK
omc@omc-virtual-machine:~/Celery$ celery multi start w2 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Starting nodes...
> w2@omc-virtual-machine: OK
omc@omc-virtual-machine:~/Celery$ celery multi start w3 -A CeleryPro -l info
celery multi v4.1.0 (latentcall)
> Starting nodes...
>w3@omc-virtual-machine:OK

重启Celery的多个worker

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

停止Celery的多个worker

omc@omc-virtual-machine:~/Celery$ celery multi stop w3 -A CeleryPro -l info       celery multi v4.1.0 (latentcall)
> Stopping nodes...
> w3@omc-virtual-machine: TERM -> 2168$ celery multi stopwait w1 -A proj -l info

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

omc@omc-virtual-machine:~$ ps -ef|grep celery

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

 

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

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

    Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1. 一个django项目的组织如下: - proj/ - manage.py - proj/ - __i ...

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

    项目的目录结构: 项目前提: 安装并启动Redis 安装Django和Celery的定时任务插件 安装方法一: pip直接安装[安装了pip的前提下] omc@omc-virtual-machine: ...

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

    django 可以轻松跟celery结合实现异步任务,只需简单配置即可 同步执行和异步执行 注意:即使Celery的任务没有执行完成,但是已经创建了任务ID.可以利用前台的定时任务发送Ajax异步请求 ...

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

    Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...

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

    celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat 文件定时执行任务 项目前提: 安装并启动Redis celery_Sche ...

  6. JavaScript回顾一下js的基础知识,以及学习一下在项目中了解到的新知识

    学习文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions https://www.cnblogs.com ...

  7. 学习笔记——make项目中克隆GitHub目录失败的解决

    在示例项目中执行make后出现下面的错误 WARNING: Missing submodule components/json/cJSON... WARNING: Missing submodule ...

  8. scrapy学习笔记:项目中 使用代理ip

    做为一个爬虫,最头疼的问题就是你的ip被封,想要在Scrapy领域无限制畅游,做好伪装是第一步,于是乎,抓取代理IP成了很多教程的开始部分.这里我说一下代理scrapy中代理ip,仅供大家借鉴! 代理 ...

  9. SQL学习笔记之项目中常用的19条MySQL优化

    在写文章之前,首先感谢 飞友科技 陆老师提供的文档.. 声明一下:下面的优化方案都是基于 “ Mysql-索引-BTree类型 ” 的 0x00 EXPLAIN 做MySQL优化,我们要善用 EXPL ...

随机推荐

  1. MySQL中date类型的空值0000-00-00和00:00:00

    1.如果mysql中使用了date类型,并且默认值为'0000-00-00', 那么数据库中的'0000-00-00 00:00:00', '0000-00-00', '00:00:00'这三个值是相 ...

  2. Cookie文件说明及IE的Cookie文件格式

    1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保 ...

  3. java面试⑥框架部分

    2.5.1 什么是框架: 2.5.2 MVC模式 2.5.3 MVC框架 2.5.4 简单讲一下struts2的执行流程 2.5.5 Struts2中的拦截器,你都用它干什么? 2.5.6 简单讲一下 ...

  4. gocommand:一个跨平台的golang命令行执行package

    最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生e ...

  5. java 实现 PDF 加水印功能

    使用java代码实现给PDF加水印的功能 首先导入所需要的依赖 <dependency> <groupId>com.itextpdf</groupId> <a ...

  6. 撰写html标签的快捷方式2

    1.写一个含有类的标签. div.demo-inline + tap键 就会生成如下<div class="demo-inline"></div> 2.CS ...

  7. 大话JVM(一):垃圾收集算法

     系列介绍|本系列主要是记录学习jvm过程中觉得重要的内容,方便以后复习 在说垃圾收集算法之前,先要说一下垃圾收集,从大的讲,垃圾收集需要考虑三件事情: 1.哪些内存需要回收 2.什么时候回收 3.如 ...

  8. IDEA 导出maven项目所有的依赖包到指定的目录

    问题产生: 需要把一个maven工程调整结构,部署到一个新环境中,需要把依赖的jar包,单独打到一个目录中. 解决方案: 需要两步便可以copy到指定的目录中. 第一步: 找到maven projec ...

  9. C#的字节与流

    计算机中文件有很多种,我们知道实际存在计算机中的都是二进制.这里我记录了通过流对文件的读取操作. 一.首先在这里简单涉及下位,字节,字符的概念. 位(bit):可以表示0或1: 字节(byte):由8 ...

  10. 简洁php的MVC框架

    一.文件结构 建立3个文件夹 controller文件夹存放控制器文件 view文件夹存放视图文件 model文件夹存放数据文件 建立1个index.php 作为唯一入口 二.控制器 我们在contr ...