If at least one result hangs, then sbws will hang, because AsyncResult.ready() does not have a timeout.
In theory this won't happen, since both circuits and requests have a timeout. Also the sleep happen in the main thread, not the thread that is getting the results
Instead, sbws should call AsyncResult.wait([timeout]) on each result, after calling pool.apply_async() on a large number of results.
a maximum of timeout.
get with timeout uses wait, and that's what we want since pending results that didn't trigger either callback or callback error have not been gotten, and get give us either the exception or the value.
After merging #28932 (moved), this is an improvement, can wait to 1.1 milestone.
For my own curiosity: why is the time cutoff set to "the number of releys to measure multiplied by TIMEOUT_MEASUREMENTS (around 90mins)"?
Well spotted. Actually when measuring 300 relays it takes around 90min. In the case a relay doesn't get measured in 3min, there's no need to wait that 300 relays take each of them 3min, it can just finish when there hasn not been any relay measured in that time.
I commited a fixup to do that, tested the whole loop in the public network and works.