2009-07-13 4 views
0

HI, ich habe ein Multithreading-Programm, das alle Threads auf Oracle DB arbeiten wird. Also, kann sqlalchemy parallele Operation auf Orakel unterstützen?python sqlalchemy Parallelbetrieb

tks!

Antwort

3

OCI (Oracle-Client-Schnittstelle) hat einen Parameter OCI_THREADED, der dazu führt, dass Verbindungen mutexed werden, sodass der gleichzeitige Zugriff über mehrere Threads sicher ist. Dies ist wahrscheinlich die Einstellung, auf die sich das Dokument, das Sie gesehen haben, bezieht.

cx_oracle, die im Wesentlichen eine Python-> OCI-Brücke ist, ermöglicht den Zugriff auf diese Einstellung in ihrer Verbindungsfunktion mit dem Schlüsselwortargument "threaded", beschrieben unter http://cx-oracle.sourceforge.net/html/module.html#cx_Oracle.connect. Die Dokumente geben an, dass es standardmäßig falsch ist, da es zu einer "10-15% igen Leistungseinbuße" kommt, obwohl für diese Informationen keine Quelle angegeben wird (und Leistungsstatistiken sollten in der Regel immer als verdächtig angesehen werden).

Soweit SQLAlchemy, der cx_oracle Dialekt mit SQLAlchemy setzt diesen Wert standardmäßig auf True, mit der Option, es wieder auf False setzen beim Einrichten der Engine über create_engine() - so auf dieser Ebene gibt es kein Problem.

Aber darüber hinaus verhindern SQLAlchemy empfohlene Nutzungsmuster (d. H. Eine Sitzung pro Thread, Verbindungen lokal zu einem Pool zu halten, wo sie von einer Funktion wie benötigt ausgecheckt werden) in jedem Fall den gleichzeitigen Zugriff auf eine Verbindung. Sie können also die "threaded" -Einstellung von create_engine() deaktivieren und die möglicherweise spürbaren Leistungssteigerungen genießen, wenn regelmäßige Nutzungsmuster eingehalten werden.

1

Solange jeder gleichzeitige Thread seine eigene Sitzung hat, sollten Sie in Ordnung sein. Wenn Sie versuchen, eine gemeinsame Sitzung zu verwenden, geraten Sie in Schwierigkeiten.

+0

tks, seit Orakel offiziellen Dokument sagte, dass Sie etwas aktivieren sollten (don 't wissen, was" etwas "ist noch nicht ...) für Orakel parallel Fähigkeit zu verwenden .. Was soll ich in sqlalchemy tun? – Ryan