如何使用docker和python创建和跟踪处理链

时间:2018-10-30 12:54:24

标签: python docker

我正在计划将其放入自己的容器中的一系列过程。这是一个简单的逐步过程,但是我不确定从哪个容器到另一个容器获取数据的最佳方法是什么,或者如何跟踪进度。通常,我会分别将活动2、3和4制作成脚本,然后将它们全部导入活动1。现在,每个活动将是一个单独的容器,我不确定该怎么做。

活动1-提供2d形状矢量。将此传递给活动2。
活动2-根据活动1中提供的形状下载图像。
活动3-下载图像后,进行一些分析。
活动4-分析完成后,运行统计信息并将信息保存到数据库。

一个想法是使用docker run和入口点。活动1将在某个时候运行活动2,该活动将python脚本作为入口点。

docker run activity2 "inputVectorFromActivity1"

另一种选择是使用环境变量

docker run activity2 -e INVECTOR="inputVectorFromActivity1"

因此,在这些示例中,活动1将调用2,将调用3,将调用4。这似乎合乎逻辑,但是我不确定这是最佳解决方案。我也看不到一种跟踪进度或报告错误的优雅方法。

任何见识都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我将研究一个排队系统,例如RabbitMQ。这样一来,您将有四个队列,每个任务一个队列,并让您​​跟踪事物的位置,并同时在每种可能的状态下具有多个事物。您可以有四个单独的长期运行的容器,这些容器都可以在这些队列之一中工作,并且,如果您需要更高的处理能力(例如在分析阶段),则可以启动该容器的多个副本。

解决问题时,听起来似乎并不太复杂,应该考虑在单个进程/脚本/容器中运行它的优点。 (例如,最后一步“从某个磁盘位置获取数据并将其复制到数据库中”可能会更容易与之前的步骤合并;如果整个管道减少为“获取数据,处理并保存”也许不称其为“管道”可能更简单。)

几乎绝对不应将docker rundocker exec纳入核心处理流程。如果您可以运行这两个Docker命令中的任何一个,则可以对主机系统进行任何操作:有一些主要的安全注意事项,您不希望考虑。根据您的环境,您可能还希望避免一些启动成本(例如,涉及JVM的一切仍然需要花费很长的时间)。长时间运行的工作容器通常是更好的模型。