使用多处理并行运行测试

时间:2019-04-15 08:07:25

标签: python multiprocessing

我想并行执行2个或更多设备上的测试。

我有一个包含测试的列表,我想将它们分布在test_proc函数中的所有设备上。例如,对第一个设备使用test1.py,对第二个设备使用test2.py,依此类推。它们是并行执行的, 如果test1.py的执行速度更快,则test3.py将转到带有测试列表的第一个设备,依此类推。 我用测试创建了一个队列,现在我有了: 如果test1.py的运行速度比test2.py快,则test3.py不在第一台设备上运行,而是在等待test2.py完成。

1 个答案:

答案 0 :(得分:0)

您应该实现multiprocessing.Queue as described in the docs来解决此问题。它在进程之间创建一个共享队列,然后每个进程在完成任务之前都会从中拉出。

from multiprocessing import Process, Queue

def worker(input):
    for func, args in iter(input.get, 'STOP'):
        result = func(*args)
        # do something

def test1():
    pass
def test2():
    pass
def test3():
    pass

functions = [test1, test2, test3]

tests = Queue()

def test_proc(functions, tests):
    all_process = []
    for x in functions:   # functions would be list of tests you want to run
        tests.put(x)
    for i in number_of_processes:   # start up a number of processes 
        process = Process(target=worker, args=(tests))
        all_process.append(process)
        process.start()
    for p in all_process:
        tests.put('STOP')   # stop each process via the queue
        p.join()

if name == "__main__":
    test_proc(functions, tests)