我的情况是:
- 在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个线程。或通过唯一键和消费者(队列)为每个工人的单独线程中的任务流。