Я ударяю головой уже более дня, пытаясь понять, почему дети моей программы не могут вызвать какое-либо исключение и просто умереть, вместо того, чтобы зависеть целое Pool
. Позвольте мне добавить, что я обыскал в Интернете часами, не нашел чего-то связанного.Карта пула Python висит, когда подпроцесс убит
Давайте рассмотрим в качестве примера:
#!/opt/perforce/bin/python/3.4.2/bin/python3
import multiprocessing
import sys
def run(i):
print(i)
sys.exit(1)
iteration = ['test1', 'test2', 'test3']
with multiprocessing.Pool(1) as pool:
pool.map(run, iteration)
print("reached here ?")
с sys.exit()
, печать никогда не достигается, pool.map
вешает блоки по некоторым причинам. На моем подлинном скрипте добавлен sys.exit()
, когда я поймаю какие-то ошибки. Я хотел бы умело убить рабочего (или просто пропустить итерацию, как перерыв). Я пробовал sys.exit()
, exit()
или даже os.kill()
, но не повезло ...
Возможно ли это?
Которая 'print' не достигнута? Тот, который говорит, «достигнут здесь?» или один (ы) внутри 'run()'? – DaveBensonPhillips
принт «достигнут здесь?». Мне интересно, почему мой pool.map никогда не заканчивается. :) –