Celery分布式应用

2024-03-16 20:38
文章标签 分布式应用 celery

本文主要是介绍Celery分布式应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近有应用需要部署到不同的服务器上运行,但是有没有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 sysfrom celery import Celeryapp = 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 runfor 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分布式应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816656

相关文章

Celery-----分布式任务队列

Celery-----分布式任务队列 高可用:任务失败或者连接断了自动重试 快:一个celery进程可以处理上10万的任务每分钟 灵活:可以自定义实现每一个模块 如果你是windows用户,首先现在安装redis, 安装celery pip install celerypip install redis 默认会安装好celery最新版本 创建Celery实例 app = Cele

Celery 中,广播模式可以通过使用 RabbitMQ 的 fanout 交换机来实现

这里写自定义目录标题 设置 Django 的 settings 模块从 Django 的 settings 文件中加载 Celery 配置自动发现任务使 Celery 实例可用配置 Celery 的任务路由 在 Celery 中,广播模式可以通过使用 RabbitMQ 的 fanout 交换机来实现。fanout 交换机会将消息广播到所有绑定到它的队列中。我们可以使用这种模式来让 C

celery笔记1

2 Celery介绍 2.1 Celery是什么 # 1 celery 是一个灵活且可靠的,处理大量消息的分布式系统,可以在多个节点之间处理某个任务-现在干一堆活,如果一个人,需要一件件来做-招了几个人,分别安排不同人干活-并发效果--》同时好多人在干活# 2 celery 是一个专注于实时处理的任务队列,支持任务调度# 3 celery 是开源的,有很多的使用者# 4 celery 完全基于

【celery-2】python-Django发送邮件-短信-钉钉通知

一 Python发送邮件 1.1 使用SMTP模块发送邮件 import smtplibfrom email.mime.text import MIMETextfrom email.header import Headermsg_from = 'xxx@qq.com' # 发送方邮箱passwd = 'xxx' # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱密码)msg_

消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?

原文链接:https://www.ikaze.cn/article/43 写这篇博文的起因是,我在论坛宣传我开源的新项目YTask(go语言异步任务队列)时,有小伙伴在下面回了一句“为什么不用nsq?”。这使我想起,我在和同事介绍celery时同事说了一句“这不就是kafka吗?”。 那么YTask和nsq,celery和kafka?他们之间到底有什么不同呢?下面我结合自己的理解。简单

Celery 4.3.0 在task中执行多线程任务

测试Celery任务能否使用多线程 在开发的调试过程中,发现如果在django项目里面或者celery的task中使用协程gevent的话,使用monkey补丁的时候会报错。 那么尝试了很久,发现在celery中是可以执行多线程的,下面来演示一下执行的示例。 编写使用多线程的task import threadingfrom time import sleep,ctimedef smok

笔记-python之celery使用详解

Celery是一个用于处理异步任务的Python库,它允许你将任务分发到多个worker进行处理。以下是Celery的使用详解: 安装Celery 使用pip安装Celery: pip install celery 创建Celery实例 首先,需要创建一个Celery实例,指定broker(消息中间件)和backend(结果存储)。 from celery import Celeryap

celery 使用总结

1、推荐查看链接         celery详解         本人借鉴上面链接,成功配置好celery异步任务,感觉一些点总结的还算可以 2、个人celery配置config # -*- coding: utf-8 -*-from kombu import Queue, Exchange# 设置Broker和backend# BROKER_URL = 'redis://ip:637

填坑-celery正常启动后能收到任务但不执行任务的解决办法

场景 Flask开发中用celery 6正常启动后能收到任务但不执行任务的解决办法,也没有错误提示…… INFO/MainProcess] Task app.add_together[ce406ed8-71b3-49e6-8556-f44bfe66549c] received[2024-06-20 19:38:10,632: INFO/SpawnPoolWorker-36] child p

celery分布式任务队列

celery分布式任务队列 Celery是基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。 执行单元(称为任务)使用多处理,Eventlet或gevent在一个或多个工作服务器上并发执行。任务可以异步(在后台)或同步执行(等到准备就绪)。 Celery用于生产系统,每天处理数百万个任务。 异步实时处理 支持扩展 支持多种消息队列 使用AMQP协议 应用场景: