Python sqlalchemy параллельная операция - PullRequest
0 голосов
/ 13 июля 2009

Привет, у меня есть многопоточная программа, все потоки будут работать на Oracle DB. Так может ли sqlalchemy поддерживать параллельную работу на oracle?

ТКС!

Ответы [ 2 ]

4 голосов
/ 24 июля 2009

OCI (клиентский интерфейс Oracle) имеет параметр OCI_THREADED, который влияет на мьютекс соединений, так что одновременный доступ через несколько потоков безопасен. Вероятно, это тот параметр, к которому относится документ, который вы видели.

cx_oracle, который по сути является мостом Python-> OCI, предоставляет доступ к этому параметру в своей функции подключения с помощью ключевого аргумента "threadaded", описанного в http://cx -oracle.sourceforge.net / html /module.html#cx_Oracle.connect. Документы утверждают, что по умолчанию это значение False, так как оно приводит к «снижению производительности на 10-15%», хотя источник этой информации не указан (а статистику производительности всегда следует рассматривать с подозрением, как правило).

Что касается SQLAlchemy, в диалекте cx_oracle, поставляемом с SQLAlchemy, для этого значения по умолчанию установлено значение True, с возможностью установить его обратно в False при настройке движка с помощью create_engine () - так что на этом уровне проблем нет ,

Но кроме того, рекомендуемые шаблоны использования SQLAlchemy (т. Е. Один сеанс на поток, сохраняющий соединения локальными по отношению к пулу, где они по мере необходимости извлекаются функцией) предотвращают одновременный доступ к соединению в любом случае. Таким образом, вы можете отключить «многопоточную» настройку create_engine () и наслаждаться ощутимым увеличением производительности при условии регулярного использования.

1 голос
/ 13 июля 2009

Пока у каждого параллельного потока есть свой собственный сеанс, все будет в порядке. Попытка использовать один общий сеанс - вот где у вас будут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...