多进程、多任务的作业调度程序
drummer的Python项目详细描述
鼓手
drummer是一个用于linux的python多进程和多任务作业调度程序,最好作为一个systemd服务。您可以在逻辑定义的作业中编写自己的任务,即执行顺序取决于任务结果的任务链。
例如:如果任务A成功,则执行任务B;如果任务B失败,则执行任务C;无论任务A的结果如何,都始终执行任务D。
鼓手被Comodojo Extender深深地浸染了:因此我想承认它的作者。
快速启动
安装快捷方便。
> pip install drummer
指定要在其中初始化鼓手环境的文件夹,还可以指定内部数据库的文件名。
> drummer-admin init BASE_FOLDER [--database database_file]
在初始化过程中,鼓手会询问是否应该创建相关的linux systemd服务文件(这是推荐的选择)。如果使用virtualenv安装,它还会询问要使用哪个python可执行文件。
现在几乎可以开始了。
鼓手如何工作
鼓手机械由三个过程组成:
- 一个调度进程,构建在sched module
- 一个套接字侦听器,用于与鼓手cli通信
- 一个主要的过程,它将所有部分组合在一起,并处理整体行为
为了确保多任务处理能力,每个任务都由一个单独的进程运行。
为鼓手创建新环境时,您会注意到正在创建几个文件和文件夹:
- config文件夹,用于配置和任务文件,如果您选择这样做,则用于systemd文件;
- 一个数据库文件夹,其中包含带有计划的内部sqlite数据库;
- 用于放置任务的tasks文件夹;
- drummer cli.py,命令行应用程序。
配置
配置参数存储在drummer-config.yml中。
其中,您可以指定存储日志文件和数据库的位置、用于任务的文件夹(默认情况下,鼓手在tasks文件夹中查找)、可以同时运行多少任务,等等。
任务
为了形成良好的格式,用户定义的任务应该很少考虑基本要求,即它们:
- 扩展由tasking模块提供的task类
- 实现一个run方法作为入口点
- 使用response类和有效的statuscode来处理任务结果(有效的statuscode属性是:“status\u ok”、“status\u warning”、“status\u error”)
一个完全有效的例子:
from drummer.tasking import Task
from drummer.foundation import Response, StatusCode
class MyTask(Task):
def run(self, params):
# the Drummer logger, built on top of python logging facility
logger = self.logger
logger.info('Starting MyTask')
response = Response()
try:
now = datetime.now()
with open('mytask.txt', 'a') as f:
f.write('Hello world!')
logger.info('File has been updated')
response.set_status(StatusCode.STATUS_OK)
response.set_data({'result': 'Task ended OK'})
except:
response.set_status(StatusCode.STATUS_ERROR)
response.set_data({'result': 'Task had an error'})
finally:
return response
run方法接受带有可选任务参数的字典。如果未指定参数,则为空。
要完成注册过程,必须在drummer-tasks.yml中声明任务及其路径。鼓手必须知道要加载的python文件的路径(表示为相对于基本文件夹的相对路径),以及公开run方法的类的名称。
当然,您也可以init您的任务类;在这种情况下,您必须处理配置和日志,如下所示:
from drummer.tasking import Task
from drummer.foundation import Response, StatusCode
class MyTask(Task):
def __init__(self, config, logger):
# init Task class
super().__init__(config, logger)
# your init code here
# ...
cli
您可以通过两种方式启动鼓手:作为systemd服务(通过systemctl命令)或使用cli,方法是调用service:start命令。
> python drummer-cli.py service:start
cli提供以下命令:
- 列出所有计划,并在单个计划中获取信息
- 添加、删除、启用、禁用或立即执行计划
- 列出所有已注册的任务
- 执行单个任务
有关详细信息,请参见:
> python drummer-cli.py -h