Будет ли вызов Engine.dispose() в разветвленном процессе вызывать ошибки в другом процессе?Python

Программы на Python
Anonymous
 Будет ли вызов Engine.dispose() в разветвленном процессе вызывать ошибки в другом процессе?

Сообщение Anonymous »

При использовании SQLAlchemy в разветвленном процессе рекомендуемый подход в документации по sqlalchemy (EDIT: первоначально связанные документы 1.3) заключается в вызове engine.dispose() сразу после инициализации разветвленного процесса. Это сделано для того, чтобы дочерние процессы не могли использовать соединение с родительским процессом. Если вы используете объект Pool, он будет выглядеть примерно так:

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

from multiprocessing import Pool

engine = create_engine("mysql+mysqldb://user:pass@host/dbname")

def run_in_process(some_data_record):
with engine.connect() as conn:
conn.execute(text("..."))

def initializer():
"""ensure the parent proc's database connections are not touched
in the new connection pool"""
engine.dispose(close=False)

with Pool(10, initializer=initializer) as p:
p.map(run_in_process, data)
Однако удаление всего пула соединений кажется мне несколько чрезмерным. На мой взгляд, это приводит к тому, что дочерний процесс говорит родительскому процессу разорвать все свои соединения. Это прекрасно работает в однопользовательском приложении, но я не уверен, как вызов Engine.dispose() будет вести себя в веб-приложении, к которому обращаются многие пользователи.
Предположим, я разветвил процесс A, который в настоящее время выполняет длительную транзакцию с моим движком. Когда я создаю новый процесс B и вызываю Engine.dispose(), приведет ли это к сбоям в процессе A?

Подробнее здесь: https://stackoverflow.com/questions/797 ... her-proces

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