我有一个函数可以创建进程的“池”并执行池中的每个进程。
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)
我正在使用它来并行运行自动化测试。但是由于这个池被加入,它等待池内的所有进程完成继续等待执行的其他项。
我正在考虑实现一个队列,并在池中的一个进程完成后自动执行队列中的下一个队列。我不知道该怎么做。
答案 0 :(得分:0)
我会使用multiprocessing
来创建/管理Pool of processes,并使用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()