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

摘要:
3.如果前台用户请求[即,没有多次激活的单元格]断开连接,前台工作任务将消失。

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

目录格式如下

image

项目前提: 安装并启动Redis

image

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解压]

image

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

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

image

image

运行结果:

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>

image

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

image

问题解决:更改项目中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

image

重启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:

image

停止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

image

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

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

image

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

 

免责声明:文章转载自《Celery学习--- Celery在项目中的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux添加/删除用户和用户组无法引用Microsoft.Office.Interop.Excel的解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ES数据库安装6.6

ES数据库安装 elastica searchelasticsearch的概念:是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。 1、elasticsearch和MongoDB/redis/memcache一样,是非关系性数据库是一...

RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用

在AppiumLibrary库中,Open Application关键字用来打开一个待测试移动APP。 示例1:连接本机已经打开的appium服务端,打开一个待测试的安卓APP,指定测试平台为Android,测试的手机deviceName为98YFBP522VSU,需要打开的APP路径为C:/Users/yongqing/Desktop/app-debug...

OM模块功能&amp;amp;API详解

(一)销售订单概述 1.1   与车间模块关系 当使用ATO类型订单时,订单管理模块会直接在车间模块中产生任务 1.2   与库存模块关系 在销售订单中使用的物料,单位等信息均来自库存模块,在订单执行过程中,按订单保留及销售发运等功能也会对库存模块起作用 1.3   与应收模块关系 销售完成后,订单管理模块会在应收接口中产生INVOICE信息,影响应收...

midway日志体系

日常普通使用 首先我们学会 Midway 的日常日志使用方法。 import{Get}from'@midwayjs/decorator'; import{Inject,Controller,Provide}from'@midwayjs/decorator';   @Provide() @Controller() exportclassHelloCont...

菜鸟python---格式化

"""-----------info----------姓名:年龄:公司:电话:------------end-----------"""name = input("name:")age = input("age:")addr = input("addr:")phone = input("phone:")a = "-----------info------...

VB6.0操作SQL Server——增删改查

http://www.cnblogs.com/Miss-Lin/archive/2012/08/13/2635848.html一、数据录入通过VB向SQL Server数据库中录入数据,可以使用数据绑定控件录入数据与使用SQL语句录入 1.利用数据绑定控件录入数据 使用数据绑定控件录入数据可以运行较少的代码,实现向数据库中录入数据,数据绑定后,由于数据...