Я нашел для себя возможность, которая может косвенно обойти эту проблему. Это на самом деле довольно просто, поэтому я хотел бы опубликовать это здесь, если кто-то еще сталкивается с этой проблемой. Я не знаю, очень ли это умно, но для меня это решение было хорошо.
Сначала благодаря @artiom, как он уже сказал, лучше всего ловить ошибку непосредственно в распараллеленной функции.
Теперь "обход":
Поместите попытку, кроме блока, внутри функции вокруг всего кода и перехватывайте все исключения с помощью
except Exception as e:
. Исключение просто регистрируется в блоке исключения, например, с помощью часового или другого каркаса ведения журнала. При этом вы можете, по крайней мере, снова взглянуть на выброшенные исключения и исправить свои ошибки в своем коде.
Простой пример:
def for_parallel(chunk):
for one in chunk:
try:
a = 1
foo(one['bla'])
doSomething(one['blu'])
except Exception as e:
sentry.capture_exception(e)
def main():
with ThreadPoolExecutor(8) as pool:
pool.map(for_parallel, my_list)