пул процессов: автоматическое добавление процесса после завершения одного из процессов - PullRequest
0 голосов
/ 05 июня 2018

У меня есть функция, которая создает «пул» процесса и выполняет каждый процесс в пуле.

def sendAndExecutePybotTests(poolProcessNum):
    fullList = _generatePybotList()
    print fullList
    pool = [fullList[i:i+int(poolProcessNum)] for i in range(0, len(fullList), int(poolProcessNum))]
    for chunk in pool:
        procs = []
        for executeLine in chunk:
            proc = Process(target=_executePybotTest, args=(executeLine,))
            procs.append(proc)
            # time interval=1 second for each suite
            time.sleep(1)
            proc.start()

        for proc in procs:
            proc.join()

executePybotTest (который просто вызывает подпроцесс для выполнения команды):

def _executePybotTest(executeLine):    
    subprocess.call(executeLine,shell=True)

Я использую это для параллельного запуска автоматических тестов.Но поскольку этот пул присоединяется, он ожидает завершения всех процессов в пуле, чтобы перейти к другим элементам, ожидающим выполнения.

Я пытался реализовать очередь и автоматически выполнять следующую в очереди после завершения одного из процессов в пуле.Я не уверен, как это сделать.

1 Ответ

0 голосов
/ 05 июня 2018

Я бы использовал multiprocessing для создания / управления пулом процессов , а Pool.map для распределения списка тестов по процессам в пуле.Затем каждый процесс может выполнить тест по мере их получения.Метод map обеспечивает распределение задач для каждого процесса в пуле, поэтому вам не нужно заниматься его реализацией самостоятельно.

from multiprocessing import Pool

def execute_test(input):
    print("executing test " + input)

if __name__ == "__main__":
    full_list = _generatePybotList()
    p = Pool(poolProcessNum)
    p.map(execute_test, full_list)
    p.close()
    p.join()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...