Message305124
Multiprocessing's pool apparently attempts to repopulate the pool in an event of sub-process worker crash. However the pool seems to hangs after about ~ 4*(number of worker) process re-spawns.
I've tracked the issue down to queue.get() stalling at multiprocessing.pool, line 102
Is this a known issue? Are there any known workaround?
To reproduce this issue:
import multiprocessing
import multiprocessing.util
import logging
multiprocessing.util._logger = multiprocessing.util.log_to_stderr(logging.DEBUG)
import time
import ctypes
def crash_py_interpreter():
print("attempting to crash the interpreter in ", multiprocessing.current_process())
i = ctypes.c_char('a'.encode())
j = ctypes.pointer(i)
c = 0
while True:
j[c] = 'a'.encode()
c += 1
j
def test_fn(x):
print("test_fn in ", multiprocessing.current_process().name, x)
exit(0)
time.sleep(0.1)
if __name__ == '__main__':
# pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
pool = multiprocessing.Pool(processes=1)
args_queue = [n for n in range(20)]
# subprocess quits
pool.map(test_fn, args_queue)
# subprocess crashes
# pool.map(test_fn,queue) |
|
Date |
User |
Action |
Args |
2017-10-27 15:10:27 | olarn | set | recipients:
+ olarn |
2017-10-27 15:10:27 | olarn | set | messageid: <1509117027.21.0.213398074469.issue31886@psf.upfronthosting.co.za> |
2017-10-27 15:10:27 | olarn | link | issue31886 messages |
2017-10-27 15:10:27 | olarn | create | |
|