同时执行(或队列)一组



我的情况是:

  • 在5至20个测试环境之间,分别由5 VM分开(通常为1 set = 5 VM)
  • 应在1 VM设置上同时执行数百个测试用例。
  • 芹菜有5名工人(每个VM的1个工人都来自VM的设置: alpha beta Charlie /strong>, echo

测试集可以以不同的顺序运行并使用差异。执行的时间。每个工人应仅执行一个测试案例,而不会重叠或并发。每个工人仅从自己的队列/消费者进行任务。

在以前的版本中,我有一个带有多处理的解决方案,并且效果很好。但是使用芹菜,我无法从一组中添加所有5VM的所有100个测试案例,它仅开始添加VM alpha 的任务等等。

现在,当我尝试使用多处理为每个工人创建单独的线程时,我得到的: ostertionError:不允许守护程序可以生育孩子

问题是 - 如何同时为5名工人添加100次测试?

因此,每个工人(来自 alpha beta ,...)将同时运行自己的100个测试用例。

可以使用基于每个消费者的任务密钥来解决此问题,例如:

app.control.add_consumer(
    queue='alpha',
    exchange = 'local',
    exchange_type = 'direct',
    routing_key   = 'alpha.*',
    destination = ['worker_for_alpha@HOSTNAME'])

现在,您可以使用键和队列名称将任何任务发送给该消费者的单独工作者:

@app.task(queue='alpha', routing_key = 'alpha.task_for_something')
def any_task(arg_1, arg_2):
    do something with arg_1 and arg_2

现在,您可以将其扩展到任何数量的单个工人的工人或消费者。只需为多个工人消费者一个一个集合,然后将他们一个一个iTer。

可以使用 - 并发选项解决另一个问题。您可以将并发设置为5,以在一个工人上同时使用5个线程。或通过唯一键和消费者(队列)为每个工人的单独线程中的任务流。

相关内容

  • 没有找到相关文章

最新更新