三个不同任务调度程序的概要,具有依赖关系管理。

pyScheduler的Python项目详细描述


pyscheduler是一个非常简单的任务的纯python实现 调度程序。

什么是调度程序?

任务调度程序是按给定顺序执行任务的控制器。 在这种情况下,执行任务,以便在 任何依赖关系。

为什么我可以使用调度程序?

好吧,在这一点上,你可能在想,建造 如果你只想执行一些任务的话,就是这样一个装置。把它们放进去 在列表中,对它们进行排序,以便在其依赖项之前不执行任何任务, 去吧!好吧,这确实是串行调度程序背后的想法。 它看起来确实不是很有用…但是事情变得更令人兴奋了 一旦你意识到你可以从固有的 依赖项描述的并行性。这意味着你不是 一次只能执行一个任务,但您可以执行所有 同时没有依赖项的任务。

平行进行

pyscheduler模块提供3种不同的调度程序类型:-serialscheduler -这(显然)是不平行的。-processparallelscheduler-哪个 使用多处理模块并行运行任务。- mpipallelscheduler-它使用 mpi4py要在中运行任务的模块 平行的。

如果计划使用 本地机器。如果您想使用 群集中的调度程序。使用MPI调度程序时,请记住 必须使用mpirun运行python脚本(进程数为np) 否则它将无法工作(基于进程的调度程序允许 构造函数中的进程数)。

非常简单的示例(来自测试包)

假设我们要执行10个依赖关系图是 如下图所示:

第一步是创建调度程序并定义任务: python scheduler = SerialScheduler() scheduler.add_task(task_name = "1", dependencies = ["2","3"], description ="",target_function = test_function ,function_kwargs={"this":1}) scheduler.add_task(task_name = "2", dependencies = ["4"], description ="",target_function = test_function ,function_kwargs={"this":2}) scheduler.add_task(task_name = "3", dependencies = ["5","6"], description ="",target_function = test_function ,function_kwargs={"this":3}) scheduler.add_task(task_name = "4", dependencies = [], description ="",target_function = test_function ,function_kwargs={"this":4}) scheduler.add_task(task_name = "5", dependencies = [], description ="",target_function = test_function ,function_kwargs={"this":5}) scheduler.add_task(task_name = "6", dependencies = [], description ="",target_function = test_function ,function_kwargs={"this":6}) scheduler.add_task(task_name = "7", dependencies = [], description ="",target_function = test_function ,function_kwargs={"this":7}) scheduler.add_task(task_name = "8", dependencies = ["9"], description ="",target_function = test_function ,function_kwargs={"this":8}) scheduler.add_task(task_name = "9", dependencies = [], description ="",target_function = test_function ,function_kwargs={"this":9}) 上面的代码演示了如何创建serialscheduler(另外两个是 以相同的方式或多或少地创建)并添加任务。每个任务是 由其标识符(必须是唯一的)定义的描述(即 可以是空的)和可调用的,以及我们要传递给它的参数 执行时可调用。最后,该方法还接受 依赖项数组。这个数组包含任务的ID 定义取决于。

最后一步是运行调度程序: python scheduler.run()taks将按此顺序运行(7、9和8可以 比其他人跑得快): 4 -> 2 -> 5 -> 6 -> 3 -> 1 -> 7 -> 9 -> 8如果要并行化 执行你的任务,只要改变第一行 例如:parallel = ProcessParallelScheduler(4),您的计算机将 使用4个进程完成作业(一个用作控制节点, 只有3个过程将有助于这项工作)。在这种情况下,这是一个 你可以得到的可能的运行轨迹: 4 -> 2 -> 8 -> 9 5 -> 3 6 -> 7甚至: 4 -> 2 -> 7 5 -> 3 -> 9 6 -> 8这是更好的平衡。

文件在哪里?

模块有大量的文档记录。给密码一个机会!

下一步

还需要做的事情包括一个允许任务使用 它们直接或间接依赖的结果 检查以警告(并避免)依赖循环的定义。 在“下一个任务”中添加一点逻辑(并重构) 选择器'以改善负载平衡(请参阅上面的示例以获取示例 任务的选择如何影响平衡)。所以:-[]循环 依赖项检查-[]任务结果共享机制-[]更智能的加载 平衡

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

推荐PyPI第三方库


热门话题
swing Java按钮/网格布局   java列出Google日历中的所有事件   java无效:单击API publisher test按钮后连接到后端时出错   带有内部赋值的java While循环导致checkstyle错误   java为什么trimToSize/ensureCapacity方法提供“公共”级访问?   文件输出流的java问题   ListIterator和并发修改异常的java问题   java如何使用两个URL映射   无法识别使用“./../”构造的字符串java相对路径,为什么?   首次写入remotelyclosedsocket不会触发异常,对吗?JAVA   java OneDrive REST API为文件上载提供了400个无效谓词   Java泛型、集合接口和对象类的问题   OpenSSL Java安全提供程序   jmeter java运行jmx禁用操作