进程池:其中一个进程完成后自动添加一个进程

process pool: adding a process automatically once one of the process is completed

我有一个函数可以创建 "pool" 个进程并执行池中的每个进程。

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)

我正在使用它来 运行 并行进行自动化测试。但是由于这个池被加入,它等待池内的所有进程完成以继续等待执行的其他项目。

我正在研究实现一个队列,并在池中的一个进程完成后自动执行队列中的下一个。我不确定该怎么做。

我会使用 multiprocessing 到 create/manage Pool of processes, and use 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()