Поток освобождает event loop от блокирующего вызова, но не делает сам вызов неблокирующим или легко отменяемым. Ограниченный пул может заполниться, а зависшие операции продолжат занимать workers.
Какие недостатки и ограничения есть у выполнения блокирующей функции в отдельном потоке?
Поток освобождает event loop от блокирующего вызова, но не делает сам вызов неблокирующим или легко отменяемым. Ограниченный пул может заполниться, а зависшие операции продолжат занимать workers.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Поток освобождает event loop от блокирующего вызова, но не делает сам вызов неблокирующим или легко отменяемым. Ограниченный пул может заполниться, а зависшие операции продолжат занимать workers.
Нужны timeout на уровне библиотеки, ограничение конкурентности и наблюдение за очередью пула. Отмена await обычно не останавливает уже выполняющийся код в потоке. CPU-код под обычным GIL может не ускориться, а разделяемые объекты требуют потокобезопасности. Также учитывают передачу контекста и закрытие ресурсов. Для массового сетевого I/O нативный async-клиент часто проще масштабировать.