用于作业调度和SSH的Python库

7 投票
6 回答
6430 浏览
提问于 2025-04-16 15:34

我想找一个用户空间的工具(最好是用Python写的,如果没有,那就找一个我能轻松修改的工具)来替代我现在用的一个小脚本,这个脚本主要做两件事:

  • 监控不到100台电脑(恰好是Fedora 13)以获取它们的负载、可用内存,以及是否有人在使用它们
  • 选择合适的主机来执行任务,通过ssh运行这些任务。这些任务是执行一些可以读写共享文件系统的命令行程序,通常是图像处理脚本或类似的,可能会消耗很多CPU和内存。

举个例子,使用我现在的脚本,我可以在Python提示符下

>>> import hosts
>>> hosts.run_commands(['users']*5)

或者在命令行中

% hosts.py "users" "users" "users" "users" "users"

运行命令users五次(在检查了至少5台电脑的CPU负载和可用内存后,从配置文件中找到可以运行这个命令的5台电脑)。除了我刚刚运行的脚本外,不应该有其他的任务服务器,也不应该在这些电脑上有任何工作进程。

我还希望能够跟踪这些任务,遇到失败时重新运行等,但这些都是额外的功能(在真正的任务调度器中很常见),其实我并不需要。

我找到了一些不错的Python ssh库,比如classhPuSSH,但它们没有我想要的(非常简单的)负载均衡功能。另一方面,像Condor或Slurm这样的工具,正如crispamares之前提到的,但我想要的是更轻量级的东西。虽然这些工具做事情的方式是正确的,但根据我的了解,在我需要的时候在用户空间启动它们会很麻烦,甚至几乎不可能。这不是一个专用的集群,而且我在这些主机上没有root权限。

目前我打算在classh的基础上做一个包装,随时监控电脑的忙碌情况,如果找不到其他合适的工具就用这个。

6 个回答

1

你可以修改buildbot和twisted吗?这听起来是个不错的选择。

2

Slurm 是一个强大的任务调度器,可以用 Python 编程,使用的工具叫 PySlurm

我不确定它的部署是否比 Condor 更复杂,也不清楚它是否能满足你所有的需求,但为了以防万一,我把它写下来了。

3

这里有一个叫 fabric 的工具,我很惊讶居然没有人提到它。

撰写回答