Как очистить локальные данные потока после использования ThreadPoolExecutor?Python

Программы на Python
Ответить
Anonymous
 Как очистить локальные данные потока после использования ThreadPoolExecutor?

Сообщение Anonymous »

Я хочу использовать ThreadPoolExecutor для распараллеливания некоторого (устаревшего) кода с доступом к базе данных. Я хотел бы избежать создания нового подключения к базе данных для каждого потока, поэтому я использую threading.local(), чтобы сохранить одно соединение для каждого потока, например:

Код: Выделить всё

thread_local = threading.local()

def get_thread_db():
if not hasattr(thread_local, "db"):
thread_local.db = get_database_connection()
return thread_local.db

def do_stuff():
db_conn = get_thread_db()
# ...

with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = [executor.submit(do_stuff, *params) for params in data]
# ...
Как обеспечить правильное закрытие соединений всех потоков после завершения всех отправленных задач? Похоже, что ThreadPoolExecutor имеет параметр инициализатора, но не имеет параметра для обработчика выхода.

Подробнее здесь: https://stackoverflow.com/questions/792 ... olexecutor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»