Сравнение AsyncResult
и callback
несколько неудачно.Обратите внимание, что у вас есть только обратные вызовы для асинхронных методов (возвращающие AsyncResult
объекты), поэтому в этой истории нет «против» в отношении этих вещей.
Когда вы пишете check_result(result.get())
, вы не передаете некоторый AsyncResult
-объект в check_result
, но уже ожидаемый нормальный результат, в вашем случае логическое значение (если не исключение).Так что разница не между AsyncResult
и callback
, а между ручным вызовом check_result
для результата или предварительной регистрацией обратного вызова.
Я вижу, что в python3.6 они допускают error_callback,так эти два бита кода эквивалентны?Каковы плюсы и минусы обоих?
Нет, эти два фрагмента не эквивалентны.error_callback
- обработчик исключений, ваш возможный False
-результат не сработает, но сработает исключение.В таком случае ваш аргумент result
в пределах err_result
будет заполнен экземпляром исключения.Разница с вашим верхним фрагментом в том, что на вашем лице возникнет исключение, как только вы позвоните по номеру result.get()
, и вы не заключите его в блок try-Кроме-блока.
Очевидное «за»'error_callback
- это пропущенный блок try-исключением,' pro 'обычного обратного вызова также уменьшает длину кода.Используйте оба только для немедленного возврата задач, таких как проверка и ведение журнала, чтобы предотвратить блокировку потока, в котором работает ваш пул.