Working on project in Python, and unfortunately i am newbie in Python. The code must execute multiple probes simultaneously and gather the results.
I created the following code to run the probes in different threads and gather the results (used one of the answers here : How to get the return value from a thread in python?)
summary = ProbeRunnerResult()
jobs = []
queues = []
for probe in self.probes.values():
que = Queue()
t = threading.Thread(target=lambda q, arg1: q.put(probe.run_check(arg1)), args=(que, context))
jobs.append(t)
queues.append(que)
for j in jobs:
j.start()
for j in jobs:
j.join()
for next_queue in queues:
summary.probe_results.append(next_queue.get())
and the code of ProbeRunnerResult is :
class ProbeRunnerResult:
"""Probe runner result. Includes results from multiple probes"""
def __init__(self) -> None:
self.start_time = time.time()
self.end_time = 0
self.probe_results: List[ProbeResult] = []
The probe.run_check() returns an object of type/class ProbeResult. I face two problems: 1.I put break points and dumps in the run_check() method of the Probe class, but they show, that the run_check() method of only the first listed probe is called multiple times. 2.Some of the probes execution (the execution of the run_check() method) can take minutes and i am not sure whether the current code is actually handling this correctly.
So i need advices how to handle these two problems correctly.