多进程、多任务的作业调度程序

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可执行文件。

现在几乎可以开始了。

鼓手如何工作

鼓手机械由三个过程组成:

  1. 一个调度进程,构建在sched module
  2. 一个套接字侦听器,用于与鼓手cli通信
  3. 一个主要的过程,它将所有部分组合在一起,并处理整体行为

为了确保多任务处理能力,每个任务都由一个单独的进程运行。

为鼓手创建新环境时,您会注意到正在创建几个文件和文件夹:

  • 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jsonify使用Jackson来定义嵌套对象   在Swing中禁用java图形调试   java Selenium Webdriver拖放在Jenkins上不起作用   java我对一个显示器的问题有一个非常不切实际的询问   java增强的“for”循环导致ArrayIndexOutOfBoundsException   ArrayAdapter适用于Java中的安卓编程,字符串数组   linux在Ubuntu上通过PulseAudio播放Java音频文件时出错   java在Spring应用程序中加载内部(类路径)和外部属性文件   java使用Maven连接到mySQL   Java应用程序的设计   websocket在电报api java中与dc的连接   java XMLStreamException,因为xml中的(&N)   java从控制台输出到JTextArea   Java导出文本文件   java实现parseInt方法   java为什么servlet容器会同步对特定资源/servlet的多个请求的访问?   循环中的Java“while”变量   用Java编程一个国际象棋游戏,gameOver布尔不起作用   java如何获得真正的JPanel大小?