Как обрабатывать / показывать ошибки / исключения при использовании concurrent.futures - PullRequest
1 голос
/ 07 мая 2019

При использовании новой библиотеки concurrent.futures в Python с многопроцессорностью / многопоточностью. Как я могу выставить ошибки, чтобы они отображались.

Я специально ввел ошибку в get_user_object с переменной, которая не существует. Я ожидаю, что здесь мне будет выдано сообщение об ошибке, но вместо этого программа будет зависать / завершаться немедленно.

import concurrent.futures
import multiprocessing as mp


def get_user_object(batch, doesent_exist):

    with _COUNTER.get_lock():
        _COUNTER.value += 1
        print(_COUNTER.value, end=' ')

    #error here
     print(variable_that_doesent_exist)


def init_globals(counter):
    global _COUNTER
    _COUNTER = counter


def main():
    counter = mp.Value('i', 0)
    with concurrent.futures.ProcessPoolExecutor(
        initializer=init_globals, initargs=(counter,)
    ) as executor:
        for _ in executor.map(get_user_object, range(10)):
            pass
    print()


if __name__ == "__main__":
    import sys
    sys.exit(main())
...