什么是工作流自动化工作,其中任务具有未知数量的输入?

时间:2017-04-11 19:55:28

标签: python automation workflow luigi

我想使用像Luigi或其他Workflow自动化套件这样的东西。我的问题是我的节点具有未知数量的输入。例如,Luigi要求您提前对输入进行硬编码。

让我们说我有一个图表,其中节点代表任务,所有线路都向下流动并从输出指向其他任务的输入

  A
 / \
|   B
 \ /
  C

我们从A开始但向下流向B,然后C和C也接受A的输出。

我找到了像SciLuigi这样的东西,但它并没有完全解决我的问题。

1 个答案:

答案 0 :(得分:0)

您需要回答的问题是:C如何知道何时运行? A和B如何知道何时运行?这是Luigi任务的requires方法。 Luigi模型是拉模型,其中每个批处理任务根据它所依赖的任务的完成来决定何时运行。 (考虑AB"向下流动"到C

是没有帮助的。

在您展示的简单模型中,C是管道的启动任务。 {}将加载C(但不会调用run),并检查AB是否已完成。如果其中任何一个未完成,它将告诉该子集运行。如果它们已经完成,或者一旦完成,C将致电run。如果任务AB只能有条件地执行工作,那么他们的complete方法可以在没有工作要做的情况下返回True。然后C可以run

但是,我不确定这是你的特殊问题。也许您希望CA运行一次,CB运行一次run?在这种情况下,我通常编写C C方法来操作任意输入列表(无论它们是目录中的文件,状态数据库中的行还是其他一些引用列表) )。但是,在这种情况下,有时候将A添加到BC的定义中也可能更好,或许可以定义在后处理中添加的Task的子类由version: '2' services: drone-server: image: drone/drone:0.5 ports: - 8000:8000 volumes: - /opt/docker/drone:/var/lib/drone - /path/to/ssh:/key environment: - DRONE_OPEN=true - DRONE_GOGS=true - DRONE_GOGS_URL=http://gogs.xx.xx - DRONE_GOGS_GIT_USERNAME=user - DRONE_GOGS_GIT_PASSWORD=password - DRONE_SECRET=key - DEPLOY_KEY=@/key/id_rsa - DRONE_DEBUG=true drone-agent: image: drone/drone:0.5 command: agent restart: unless-stopped depends_on: [ drone-server ] volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_SERVER=ws://drone-server:8000/ws/broker - DRONE_SECRET=key 提供的步骤。

在任何情况下,有许多方法可以运行管道,但很难在您描述的极高抽象级别上提出好的替代方案。我发现将你的思维转变为拉模型可能是找到它们的第一步。