Создавайте изменяемые ресурсы в init каждого экземпляра и передавайте зависимости явно, не храните их в общих атрибутах класса. Но один экземпляр, переданный разным потокам, всё равно общий.
Как избежать общего использования ресурсов потоками, чтобы ресурсы были изолированы для каждого инстанса?
Создавайте изменяемые ресурсы в __init__ каждого экземпляра и передавайте зависимости явно, не храните их в общих атрибутах класса. Но один экземпляр, переданный разным потокам, всё равно общий.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Создавайте изменяемые ресурсы в init каждого экземпляра и передавайте зависимости явно, не храните их в общих атрибутах класса. Но один экземпляр, переданный разным потокам, всё равно общий.
Для ресурса на поток подходит threading.local; для async-задач — ContextVar с корректным жизненным циклом. Соединения к БД лучше брать из пула по правилам драйвера. Полной изоляции памяти у потоков нет — для неё нужны процессы. Изоляция не отменяет согласование доступа к общей внешней БД или файлу.