生成一个计划,根据函数图分派调用,满足数据依赖性。
schedula的Python项目详细描述
什么是schedula?
schedula实现了一个智能函数调度器,它选择 并执行函数。订单(工作流)是根据 提供输入和要求的输出。当 它的所有依赖项(即输入、输入域)都得到满足,并且 当至少要计算一个输出时。
- 注意:schedula正在执行的运行时选择
- 要调用的最小工作流。工作流描述 整个过程,即功能执行的顺序 由有向无环图(DAG)定义。最小工作流 是使用最短路径计算每个输出的DAG 从提供的输入。路径是根据 带修正dijkstra的加权有向图(数据流图) 算法。
安装
要安装它,请使用(具有根用户权限):
$ pip install schedula
或者下载最后一个git版本并使用(具有根权限):
$ python setup.py install
安装附加组件
已启用一些附加功能安装以下 附加服务:
- 绘图:启用Dispatcher模型和工作流的绘图(请参见
- plot())。
- Web:启用生成Dispatcher Flask应用程序(请参阅web())。
- sphinx:启用sphinx扩展指令(即autosummary
- 和调度员。
- 并行:启用调度程序模型的并行执行。
要安装Schedula和所有附加程序,请执行以下操作:
$ pip install schedula[all]
- 注意:plotextra需要graphviz。确保目录 包含dot可执行文件的
- 位于系统路径上。如果你 如果没有,您可以从它的download page安装它。
为什么我可以使用schedula?
假设我们有一个相互依赖的函数系统,即输入 一个函数的输出是一个或多个函数的输出,我们这样做 不知道用户将提供哪些输入和哪些输出 请求。使用普通的调度程序,您必须尽可能地编写代码 实现。我厌倦了思考和编码所有可能的组合 模型的输入和输出。
溶液
schedula允许使用 基本函数,然后Dispatcher将选择并执行 给定输入和请求输出的正确功能。 此外,Traca为构造代码提供了一个灵活的框架。 它允许从更大的模型中提取子模型并运行 异步或并行建模,无需额外编码。
- 注意:成功的application
- 是co 2mpas,其中schedula被用来模拟整个 vehicle.
非常简单的示例
假设我们必须提取一些文件系统属性 不知道用户将提供哪些输入。下面的代码显示 如何创建Dispatcher添加定义 系统。注意,使用这个简单的系统,输入的最大数目。 组合是31((2^n-1),其中n是数据数)。
>>> import schedula as sh >>> import os.path as osp >>> dsp = sh.Dispatcher() >>> dsp.add_data(data_id='dirname', default_value='.', initial_dist=2) 'dirname' >>> dsp.add_function(function=osp.split, inputs=['path'], ... outputs=['dirname', 'basename']) 'split' >>> dsp.add_function(function=osp.splitext, inputs=['basename'], ... outputs=['fname', 'suffix']) 'splitext' >>> dsp.add_function(function=osp.join, inputs=['dirname', 'basename'], ... outputs=['path']) 'join' >>> dsp.add_function(function_id='union', function=lambda *a: ''.join(a), ... inputs=['fname', 'suffix'], outputs=['basename']) 'union'[graph]
提示:你可以点击它来浏览图表。
- 注意:有关如何创建Dispatcher的详细信息,请参见:
- add_data(),add_func(),add_function(), add_dispatcher(),SubDispatch,SubDispatchFunction, SubDispatchPipe、DispatchPipe和DFun。
计算输出的下一步是运行 dispatch()方法。你可以用输入调用它,所以 将计算所有可到达的输出:
>>> inputs = {'path': 'schedula/_version.py'} >>> o = dsp.dispatch(inputs=inputs) >>> o Solution([('path', 'schedula/_version.py'), ('basename', '_version.py'), ('dirname', 'schedula'), ('fname', '_version'), ('suffix', '.py')])[graph]
或者您也可以设置输出,这样调度将在 将找到所有输出:
>>> o = dsp.dispatch(inputs=inputs, outputs=['basename']) >>> o Solution([('path', 'schedula/_version.py'), ('basename', '_version.py')])[graph]