я реализовал синтаксический анализатор так,Python multiprocessing.pool не удалось остановить после завершения всех задач
import multiprocessing
import time
def foo(i):
try:
# some codes
except Exception, e:
print e
def worker(i):
foo(i)
time.sleep(i)
return i
if __name__ == "__main__":
pool = multiprocessing.Pool(processes=4)
result = pool.map_async(worker, range(15))
while not result.ready():
print("num left: {}".format(result._number_left))
time.sleep(1)
real_result = result.get()
pool.close()
pool.join()
Мой анализатор фактически завершает все процессы, но результаты не доступны т.е., это все еще внутри время петля и печать num left : 2
. Как я это прекратил? И я не хочу значения переменной real_result
.
Я бегу Ubuntu 14.04, питона 2,7
соответствующая часть моего кода выглядит,
async_args = ((date, kw_dict) for date in dates)
pool = Pool(processes=4)
no_rec = []
def check_for_exit(msg):
print msg
if last_date in msg:
print 'Terminating the pool'
pool.terminate()
try:
result = pool.map_async(parse_date_range, async_args)
while not result.ready():
print("num left: {}".format(result._number_left))
sleep(1)
real_result = result.get(5)
passed_dates = []
for x, y in real_result:
passed_dates.append(x)
if y:
no_rec.append(y[0])
# if last_date in passed_dates:
# print 'Terminating the pool'
# pool.terminate()
pool.close()
except:
print 'Pool error'
pool.terminate()
print traceback.format_exc()
finally:
pool.join()
Какая версия Python на какой ОС? Работала отлично 5 раз подряд для меня, под Python 3.5.2 на 64-битной Win 10. –
@TimPeters работает для небольшого объема данных, но при обработке на больших наборах данных result.ready() не вернет true после обработки всех данных .. т. е. он stiill печатает numleft 3: он остается в течение 15 минут, тогда он печатает numleft 2 .. –
это из-за того, что какой-то рабочий процесс все еще ожидает вывода? Рабочий func содержит код, который также отвечает за исключение throwing, но я правильно использовал исключающий класс для исключения исключений, которые были обнаружены внутри этой конкретной функции. –