这不是严格意义上的生产者-消费者模式,但这足以描述我的问题。
我有一个需要由N个进程消耗的项目列表。我想在物品空闲时立即为其分配流程号,而不是对订单进行硬编码。
例如,要运行测试,可以调用:
<runTest target="t1">
<property name="instance" value="i1" />
</runTest>
如果我手头有i1
到i3
,并且要运行t1
到t10
测试,我可以执行:
<parallel>
<runTest target="t1">
<property name="instance" value="i1" />
</runTest>
<runTest target="t2">
<property name="instance" value="i2" />
</runTest>
<runTest target="t3">
<property name="instance" value="i3" />
</runTest>
<parallel>
然后我会等待它完成,并对不同的目标运行相同的操作。我也可以循环整个代码来减少繁琐。但是,有没有可能在完成前一个目标后立即获取目标并将其提供给实例?
也许这个问题在ANT之外更容易解决?
我建议您考虑像Jenkins这样的自动化构建引擎。它能够将构建作业委托给工作进程池,这些工作进程可以在本地运行,也可以在"从属"节点上运行。Jenkins还有许多流程工作流插件,可以根据其他作业的成功或失败来运行作业。这就是持续集成/交付管道的实施方式。
希望能有所帮助。
由于并行任务和for任务太原始,无法处理这种类型的需求,如果有人一心想使用Ant,我的观点是应该编写一个新的Ant任务(此处为教程)来处理这种行为。
我还意识到,我们可以使用"脚本"任务在Ruby或Javascript中编写一小段代码,以实现同样的目标。