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

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异步任务必须是抽象的   java从ArrayList更改对象中的变量<Object>   JAVAlang.NoClassDefFoundError与ANT生成的JAR   java如何创建卡片组构造函数   java JPA EclipseLink和@TableGenerator。为什么事务回滚后分配给id的值不为空?   java是一种简单的混合JTextField/JPasswordField的方法吗?   javajaxb(JAXWS):值为null时为空标记   关于ListActivity、游标和SQL数据更新的java问题   JFrame的java无响应KeyListener   堆栈Java类型转换。对象指向自定义类的实例   eclipse在我的java项目中使用其他java文件   Java字符串引用与new不同,与new相同   java游戏介绍页。使用JFrame   在java中设置代理   java轻松打印阿拉伯数字的方法   Java“优化”:低级类中的if控件   java在页面加载之前是否可以填充JSF视图?   升级到spring boot v2后java应用程序未启动。5.2   Spring模型类中的java静态工厂方法   java Lucene令牌流异常