最近有应用需要部署到不同的服务器上运行,但是有没有PBS这样的调度系统,就想起来Python的调度神器 Celery。现在针对我的实际应用做一些记录。

1. 安装

因为我并不注重结果而是把命令拿到不同的机器上运行,所以消息代理和结果保存我都选择了 Redis

# 只需要在一台服务器上安装 redis,其他服务器均使用该服务器redis即可
sudo apt-get install redis-server

# 所有服务器都要安装以下python package
sudo pip install Celery
sudo pip install redis

当然也可以选择虚拟环境安装python包。

2. 使用

目录下含有

tasks.py

test.py

test_dir

配置程序 celeryconfig.py(也可以把配置程序写到主程序内部)

# coding: utf-8
# celeryconfig.py
# 配置消息代理和结果保存数据库,均使用redis,当然也可以使用RabbitMQ
broker_url = 'redis://172.16.34.2:6379/0'
result_backend = 'redis://172.16.34.2:6379/0'

# 客户端与消费者(worker)直接传输数据的序列化方式
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
enable_utc = True

# 设置worker从消息代理处获取的任务数目,因为我运行的程序比较耗IO,而且不同的任务耗时不同,所以每次只分给一个机器一个任务
celery_acks_late = True
worker_prefetch_multiplier = 1 

主程序 tasks.py(worker设置)

import sys

from celery import Celery

app = Celery()
app.config_from_object('celeryconfig')

@app.task
def run(cmd):
    print('runing: %s' % cmd)
    print(os.uname()) # 打印机器名,可以判断在哪台机器上执行
    # 这个任务仅仅是运行shell命令
    os.system(cmd)

启动worker

这里需要在运行的机器上均运行一下命令,启动各自的worker

# 方法1
celery worker -A tasks -l info
# 这里的tasks 指的就是 tasks.py
# 这种方式启动worker,会一直占用窗口,不方便

# 方法2,采用multi方式启动
celery multi start  -A tasks worker --loglevel=info --autoscale=5,2 --pidfile=/your/path/celery_%n.pid --logfile=/your/path/celery_%n.log

# --pidfile 存储该celery的进程id
# --logfile 存储celery的日志信息
# 涉及的 %n 表示只包含主机名, 其他还有:
#       %h 包含域名的主机名
#       %d 只包含域名

# --autoscale 可以支持进程设置
# 5,2 表示 每个机器进程池平时保持2个进程,最大并发数为5个

测试test.py

from tasks import run

for ii in range(20):
    run.delay('touch test_dir/test_%s' % ii)
    # 这里的命令是在test_dir目录下建立20个文件
    # 这里使用 delay 属性,可以把需要运行的命令加入到消息队列,在各个机器上运行
    # 如果需要更高级的命令,我们可以使用run.apply_async(**), 可以设置更多功能,比如 优先级、延迟、重试等功能

运行test.py, 只需要在一台机器上运行,即可分布到其他机器运行。

这里仅记录我使用的过程,如需更多帮助请参考:

http://www.celeryproject.org/

Celery分布式应用的更多相关文章

  1. ApacheCN Python 译文集 20211108 更新

    Think Python 中文第二版 第一章 编程之路 第二章 变量,表达式,语句 第三章 函数 第四章 案例学习:交互设计 第五章 条件循环 第六章 有返回值的函数 第七章 迭代 第八章 字符串 第 ...

  2. Celery学习笔记

    转载请注明出处:点我 我的第一篇博客!嘿嘿! 在公司实习,接触到的第一个项目就用到了Celery,之前是完全没有接触过Celery这玩意,然后花了点时间仔细的研究了下怎么用.在学习过程中也遇到了些问题 ...

  3. python celery 多work多队列

    1.Celery模块调用 既然celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,celery可以支持多台不通的计算机执行不同的任务或者相同的任务. 如果要说celery的分 ...

  4. Python之celery

    一.celery简介 Celery是一个Python开发的异步分布式任务调度模块.celery本身不提供消息服务,使用第三方服务,也就是borker来传递任务,目前支持rebbing, redis, ...

  5. 解析分布式应用框架Ray架构源码

    摘要:Ray的定位是分布式应用框架,主要目标是使能分布式应用的开发和运行. Ray是UC Berkeley大学 RISE lab(前AMP lab) 2017年12月 开源的新一代分布式应用框架(刚发 ...

  6. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  7. celery使用的一些小坑和技巧(非从无到有的过程)

    纯粹是记录一下自己在刚开始使用的时候遇到的一些坑,以及自己是怎样通过配合redis来解决问题的.文章分为三个部分,一是怎样跑起来,并且怎样监控相关的队列和任务:二是遇到的几个坑:三是给一些自己配合re ...

  8. 使用Masstransit开发基于消息传递的分布式应用

    Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用. 值得一提的是Masstran ...

  9. 解析大型.NET ERP系统 分布式应用模式设计与实现

    C/S架构的应用程序,将一些复杂的计算逻辑由客户端转移到服务器端可以改善性能,同时也为了其它方面的控制..NET Remoting在局域网内调用的性能相当不错.ERP系统中基于.NET Remotin ...

随机推荐

  1. Java泛型四:Java泛型总结

    原文地址https://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 publ ...

  2. WinForm TCP异步连接之服务器端

    C# — WinForm TCP连接之服务器端 TCP连接之服务器端,涉及到如下三个函数,分别是: /***************************** ** 函数功能: 服务端监听 ** 输 ...

  3. java synchronized和(ReentrantLock)区别

    原文:http://blog.csdn.net/zheng548/article/details/54426947 区别一:API层面 syschronized使用 synchronized即可修饰方 ...

  4. Python面试题之容器(Collections)

    容器(Collections) Python附带一个模块,它包含许多容器数据类型,名字叫作collections.我们将讨论它的作用和用法.   我们将讨论的是:   defaultdict coun ...

  5. 【BZOJ4671】(斯特林反演)

    题目 [BZOJ4671]异或图 很有意思的题 做法 直接处理显然很难,我们考虑范围扩大以求容斥或反演这类的帮助 \(f_i\)表示至少有\(i\)个联通块的方案,形如设立\(i\)个联通块轮廓,联通 ...

  6. HTML5抽奖转盘

    在线演示 本地下载

  7. java鲁棒性(健壮性)

    java能检测编译和运行时的错误 java自己操作内存减少了内存出错的可能 java实现了真数组,避免了覆盖数据的可能 Java不支持指针操作,大大减少了错误发生的可能性 ... 备注: Java能运 ...

  8. mysql分库分表(一)

    mysql分库分表 参考: https://blog.csdn.net/xlgen157387/article/details/53976153 https://blog.csdn.net/cleve ...

  9. Steema TeeChart Pro VCL FMX 2017.20 Full Suorce在Delphi XE10下的安装

    一.首先将压缩包TeeChart Pro VCL FMX 2017.20 FS.rar解压到一个目录,比如 E:\Application\Steema TeeChart Pro VCL FMX 201 ...

  10. Jquery 动态生成的元素绑定事件

    使用 on方法 $("#id1").on("click","#id2",function(){}) 这里要注意的是#id1必须是原来就存在的 ...