2017-12-26 4 views
0

I 같은 상황이 태스크의 집합 실행 (또는 대기열) : 5 VM에 의해 그룹으로 구분동시에

  • 5-20 테스트 환경 (1 개 세트 = 5 개의 VM 보통) 시험
  • 수백 1 개의 VM 세트에서 동시에 실행되어야하는 경우.
  • 5 명 근로자 (VM의 세트에서 1 개 VM 항목에 대한 각 직원 : 알파, 베타, 찰리, 델타, 에코)와
  • 셀러리

테스트 세트는 다른 실행할 수 있습니다 diff 명령을 사용하십시오. 실행 시간. 각 작업자는 중복되거나 동시성없이 하나의 테스트 케이스 만 실행해야합니다. 각 작업자는 자신의 대기열/소비자에서만 작업을 실행합니다.

이전 버전에서는 다중 처리 솔루션이있어서 잘 작동합니다. 하지만 Celery를 사용하면 모든 세트의 5VM에 대해 100 개의 테스트 케이스를 모두 추가 할 수는 없으며 VM 알파에 대한 작업 만 추가하고 다음 VM 베타 등의 작업을 모두 마칠 때까지 기다리십시오.

지금은 내가 가진 각 직원에 대해 별도의 스레드를 생성하는 멀티 프로세싱을 사용하려 한 경우 : 않고 ​​AssertionError를 : 악마의 과정은 아이들에게

문제입니다 가질 수 없습니다 - 5 명 근로자 100 개 시험을 추가하는 방법 동시에?

그래서 각 작업자 동시에 100 테스트 케이스의 그것의 자신의 세트를 실행합니다 ( 알파, 베타, ...에서).

답변

0

처럼, 각 소비자에 따라 작업 키를 사용하여 해결할 수이 문제 :

@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 
: 지금 당신은 키와 큐 이름을 사용하여 별도의 직원이 소비자에게 어떤 작업을 보낼 수 있습니다 그래서

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

이제는 단일 근로자의 모든 근로자 또는 소비자에게 규모를 조정할 수 있습니다. 컬렉션을 만들고 여러 worker \ consumer에 대해 하나씩 반복하십시오.

또 다른 문제

은 각 근로자의 --concurrency 옵션으로 해결할 수 있습니다. 동시 작업을 5로 설정하여 한 작업자에게 동시에 5 개의 스레드를 허용 할 수 있습니다. 또는 고유 한 키와 사용자 (대기열)가있는 각 작업자에 대해 별도의 스레드에서 작업 흐름을 분리하십시오.