[issue35479] multiprocessing.Pool.join() always takes at least 100 ms
STINNER Victor
report at bugs.python.org
Wed Dec 12 20:14:17 EST 2018
STINNER Victor <vstinner at redhat.com> added the comment:
Attached PR 11136 modify _worker_handler() loop to wait on threading.Event events, so Pool.join() completes as soon as possible.
Example:
---
import multiprocessing
import time
def the_test():
start_time = time.monotonic()
pool = multiprocessing.Pool(1)
res = pool.apply_async(int, ("1",))
pool.close()
#pool.terminate()
pool.join()
dt = time.monotonic() - start_time
print("%.3f sec" % dt)
the_test()
---
Minimum timing with _handle_results() using:
* current code (time.sleep(0.1)): min 0.132 sec
* time.sleep(1.0): min 1.033 sec
* my PR using events (wait(0.1)): min 0.033 sec
Currently, join() minimum timing depends on _handle_results() sleep() duration (100 ms).
With my PR, it completes as soon as possible: when state change and/or when a result is set.
My PR still requires an hardcoded delay of 100 ms to workaround bpo-35478 bug: results are never set if the pool is terminated.
----------
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue35479>
_______________________________________
More information about the Python-bugs-list
mailing list