calc_completed
is вызывается только в случае возникновения ошибки при выполнении сопоставленной функции (здесь: calculate_worker
).
Другая проблема в вашем коде заключается в том, что вы оба параллельно запускаете calculate_worker
функцию и используете ее как callback
.Это не имеет особого смысла, так как calculate_worker
будет вызываться дважды - во-первых: как рабочий , а во-вторых: как функция, сообщающая о завершении расчета.Там у вас должно быть две разные функции.
С учетом функций из предоставленного вами фрагмента я изменил бы его следующим образом:
res = pool.starmap_async(calculate_worker, ranges,
callback=calc_completed,
error_callback=calc_errored)
Если вы хотите проверить, вызывается ли calc_errored
соответственно, вы можете ввести некоторые случайные ошибки в функцию calculate_worker
, чтобы посмотреть, будет ли она обрабатываться, например,
def calculate_worker(x, y):
if (x % 7):
x / (y - y) # division by zero
print 'working...'