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