我正在尝试使用Celery来处理输入列表。我想只处理一次输入。问题是我的服务器都是超级计算机集群的一部分。我可以向每个服务器发送一个命令来启动进程。一旦该服务器被安排为我的用户名执行工作(将来会在某个随机时间发生),它将启动该进程(因此任何时候运行的服务器数量都是不确定的)。我希望所有正在执行我的用户名的服务器共享可用的工作,直到完成所有必需的工作。

但是,我很困惑,关于如何精确地编排这个。

这是我的app.py,它概述了服务器要使用的任务:

from celery import Celery

app = Celery('tasks',

backend='redis://localhost:6379/0',

broker='redis://localhost:6379/0')

@app.task

def add(x, y):

with open('results.txt', 'a') as out:

out.write(str(x + y) + '\n')

这是安排工作的脚本(worker.py):

'''Worker node; executes tasks outlined in app.py'''

from app import add

# run the add function and pass in arguments

for i in range(10000):

result = add.apply_async(args=[1,i]).get()

在我的本地机器上,如果我在终端中运行celery worker -l info -A app,那将启动芹菜应用程序。如果我然后运行worker.py,我看到正在搅拌的工作。

如何让多个不同的主机使用未完成的任务?每个服务器都可以访问将运行Redis的静态IP。我是否向每个主机提交celery worker -l info -A app命令?如果是这样的话,每个主人在上网时会不会完全消耗未完成的作品?我非常感谢其他人可以通过这些高级问题提供的任何帮助!

答案

为了回答上面的问题,我创建了一个名为app.py的文件,并将其加载到我可以ssh的前端节点。此文件概述了各个服务器上的各个工作程序将处理的功能:

from celery import Celery

app = Celery('tasks',

backend='redis://daccssfe.crc.nd.edu:6379/0',

broker='redis://daccssfe.crc.nd.edu:6379/0')

@app.task

def log(*args):

# have all workers write their results to a common outfile

with open('/scratch365/dduhaime/celery-test.txt', 'a') as out:

out.write('-'.join([str(i).strip() for i in args]) + '\n')

接下来我定义了一个函数schedule_work.py来安排要完成的工作:

'''Worker node; executes tasks outlined in app.py'''

from app import log

# run the add function and pass in arguments

for i in range(10000):

print('* processing', i)

result = log.apply_async(args=[str(i)]).get()

此文件创建10,000个工作单元,并将每个整数0:10000-1传递给工作队列。当工作人员上线时,他们将处理此队列。

为了添加工作者,我使用我大学的超级计算系统来创建10个工作程序,每个工作程序启动app.py文件,这将使工作人员从堆栈中消耗工作。要使用Sun Grid Engine队列系统(我正在使用的超级计算机将其用作作业提交协议),我将以下内容保存在文件start_workers.sh中:

#!/bin/bash

#$ -N celery

#$ -o logs/celery.log

#$ -t 1-10:1

#$ -pe smp 4

#$ -q long

#$ -r y

source ~/.bash_profile

source celery-env/bin/activate

# add a new worker

celery worker -l info -A app

然后我提交了这些工作(qsub start_workers.sh),这些工作开始了10名工人,每个工作人员都要从工作清单中提取。最后,他们都将他们的主机地址和参数从要完成的工作列表记录到他们都有权访问的所请求的文件中。正如我们在结果文件中看到的那样,10个工作主机集中的不同主机使用不同的输入:

# /scratch365/dduhaime/celery-test.txt content

10.32.77.210-0

10.32.77.210-1

10.32.77.132-2

10.32.77.210-3

10.32.77.142-4

10.32.77.132-5

10.32.77.210-6

10.32.77.192-7

10.32.77.116-8

10.32.77.142-9

10.32.77.132-10

...

celery监控服务器性能,Python:使用celery处理多个服务器上的参数列表相关推荐

  1. 通过python建立一个web服务查看服务器上的文本、图片、视频等文件

    通过python建立一个web服务查看服务器上的文本.图片.视频等文件 文章目录: 1 在服务器端开启一个服务 2 在本地浏览器中输入服务器的ip地址 1 在服务器端开启一个服务 python -m ...

  2. 服务器跑python程序_远程编写+调试服务器上的Python程序

    原帖参见(需自备梯子):https://webcache.googleusercontent.com/search?q=cache:1htdR2EXj5wJ:https://www.digitaloc ...

  3. 图片对服务器性能,关于适用base64对图片进行编码在服务器上性能的相关讨论

    C语言基础(6)-char类型 1. char常量.变量 使用单引号''引起来的就是char的常量 'a'是一个char类型的常量 "a"是一个字符串类型的常量 1是一个int型的 ...

  4. python连载第十五篇~史上最全列表知识源码+答案

    #2017-12-19 19:34:41 December Tuesday the 51 week, the 353 day #python连载第十五篇~list列表#列表定义,访问,索引,操作,切片 ...

  5. python argument list too long_间歇“OSError:[Errno 7]参数列表太长”,命令短(~125个字符)...

    在Linux上的apache2+mod_wsgi下运行的代码有时会产生以下输出.在notes.py cmd_list = [ 'abc_generate_pdf', '--cdb-url-prefix ...

  6. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...

  7. ubuntu18.04安装python3_如何在Ubuntu 18.04服务器上安装Python 3和设置编程环境

    一,介绍 Python是一种灵活且通用的编程语言,可在许多用例中利用,在脚本,自动化,数据分析,机器学习和后端开发方面具有优势.开发团队于1991年首次发布,其名称受到英国喜剧团体Monty Pyth ...

  8. Python括号里加:冒号是什么意思?参数表里加:冒号?

    python冒号有多少用法?冒号除了切片能怎么用?参数列表里的冒号是什么意思?Pyhon冒号在括号里?Python括号里加:冒号是什么意思?参数列表里加:冒号?def (context : Conte ...

  9. Python之celery的简介与使用

    celery的简介   celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度.它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能 ...

最新文章

  1. java 拖拽生成_JAVA UI 拖拽功能
  2. mysql Table 'plugin' already exists
  3. java并发之SynchronousQueue实现原理
  4. asp操作excel,显示数据及统计方法
  5. The Way to TiDB 3.0 and Beyond (下篇)
  6. pythonint切片_python-切片
  7. Ext JS高级程序设计
  8. php 如何获取表格数据类型,使用phpword获取doc中的表格数据
  9. python中函数的定义实例_Python基础之函数的定义与使用实例
  10. 数据结构之插入排序:希尔排序(缩小增量排序)
  11. 安装meme_新的Meme订单:通过简单的浏览器缓存更改游戏
  12. 【博客大赛】100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
  13. BSCI—7:OSPF的路由汇总
  14. 解决idea的html代码中使用es6语法报错的问题
  15. ABB RobotStudio6.08安装
  16. 量土地用计算机,土地面积计算器
  17. Unity(数据库SQLite)
  18. 使用代理服务器打不开网页_代理服务器:信息安全表象下的另一面
  19. Java核心技术 卷Ⅰ 基础知识(原书第10版)
  20. 自己碰到的一个control +鼠标左键无效问题。

热门文章

  1. oracle怎么查找最大值,oracle – 在每个分区的列中查找最大值
  2. 信息学奥赛一本通 1978:【18NOIP普及组】标题统计 | 洛谷 P5015 [NOIP2018 普及组] 标题统计
  3. 信息学奥赛一本通 1032:大象喝水 | OpenJudge NOI 1.3 14
  4. 信息学奥赛一本通(1088:分离整数的各个数)
  5. 理论基础 —— 线性表 —— 循环链表
  6. 尼克的任务(洛谷-P1280)
  7. Lilypad Pondg(POJ-3171)
  8. 信息学奥赛一本通C++语言——1124:矩阵加法
  9. python数据可视化实现步骤,Python 代码轻松实现数据可视化的5 种使用方法
  10. 一起学习C语言:数组(一)