生成一个计划,根据函数图分派调用,满足数据依赖性。

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()SubDispatchSubDispatchFunctionSubDispatchPipeDispatchPipeDFun

计算输出的下一步是运行 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]

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

推荐PyPI第三方库


热门话题
java有可能让Glassfish JAAS领域与一个已安装的应用程序共享一些类吗?   卸载weblogic时发生java log4j错误   java如何读取信息并将这些信息放入对象数组中   java线程池执行器。创建新线程时执行(Runnable命令)   java无法将project facet动态Web模块的版本更改为2.5   未添加到ArrayList Java Android的元素   javajavax。xml。绑定UnmarshaleException:意外元素(uri:,local:“ProcessCreditApplication”)。预期的元素是   java如何通过youtube API获取已删除视频的列表   如何在JavaBean验证中停止级联   java为什么我的ListView使我的应用程序崩溃,而不是列出我的条目?   java Guice多数据库自动切换   java(JDA)Mute命令在代码的第四行中断   推荐一种可通过Java中的随机访问进行更新的索引文件格式   java将arrayList添加到2x2 arrayList   java json对象数据发生变化,有时没有值   java使用Jedis库在redis中一次存储字符串列表   java快速排序分区   java setDaemon(false)是冗余的吗?   Java中的itext格式pdf