alright...well in this test program , i dont see the "threading=True" keyword sent to create_engine, the patch i checked in to 0.1 still has "threading" defaulting to False.

also id try running this with "strace", "truss", etc. to perhaps see where the segfault is occurring more closely.

and, using a sqlite connection has no issue ?

you also might try making a more primitive program that just uses sqlalchemy.pool to get a pooled connection, i.e. not use the SQL construction stuff. *or* dont use SA at all, use cx_Oracle directly and just put a connection in each thread. the amount of SA code being used here is very low.

also whats the threshhold at which this fails ? 50 concurrent threads is pretty high? is memory staying constant ?


On May 15, 2006, at 5:18 PM, Florian Boesch wrote:

For the life of me I couldn't figure that one out. Though I got a concise test programm for it. I applied your patch Michael, and it helps with the strange errors on select. But still eventually the programm Segmentation Fauls, no
message and nothing.

 * Threading myself without cherrypy I couldn't reproduce the problem
* Stressing cherrypy alone without sqlalchemy I couldn't reproduce the problem
 * Stressing both in concert only shows the behavior.

So atached you find a test programm that is both a small cherrypy app (cherrypy
2.1) and a little web stress tester.

Cheers,
Florian

Quoting Michael Bayer <[EMAIL PROTECTED]>:

just did a google for "cx_oracle threadsafe" and came up with this:

        http://mail.python.org/pipermail/db-sig/2004-January/003897.html

but then there also seems to be a more improved way as of 4.0.1 which
is this:

        http://starship.python.net/crew/atuining/cx_Oracle/html/module.html

So, threading support is false by default since it has a 10-15%
performance hit.  would we like this flag to be on by default ?

heres a patch to apply to oracle.py in the 0.1 series, which will add
'threaded' as a keyword parameter to oracle's create_engine.  try
setting it to true and see if that fixes your problem:

--- lib/sqlalchemy/databases/oracle.py  (revision 1407)
+++ lib/sqlalchemy/databases/oracle.py  (working copy)
@@ -106,9 +106,10 @@
      ]}

class OracleSQLEngine(ansisql.ANSISQLEngine):
- def __init__(self, opts, use_ansi = True, module = None, **params):
+    def __init__(self, opts, use_ansi = True, module = None,
threaded=False, **params):
          self._use_ansi = use_ansi
          self.opts = self._translate_connect_args((None, 'dsn',
'user', 'password'), opts)
+        self.opts['threaded'] = threaded
          if module is None:
              self.module = cx_Oracle
          else:



On May 15, 2006, at 10:13 AM, Florian Boesch wrote:

Hi,

Selecting from multiple threads with thread-count > 10 my app:
 * crashes without any error message
 * starts spweing out
cx_Oracle.DatabaseError: Error while trying to retrieve text for
error ORA-12520
 * crashes with:
*** glibc detected *** double free or corruption (fasttop):
0x3eeff0b8 ***
 * all of the above

With 10 threads it seems to run rock-solid. With 11 it gets the errors occasionally. with 50 it gets them quite reliably, with 200 you could
practically bet on the errors to happen. Though they don't show up
regularly,
mostly they happen fast or not for a long time.

I get the error as well on Linux as on Windows.

Any ideas what I can do (other then limiting my web-server to 10
threads)?

Example Atached

Cheers,
Florian



<segmentation_fault.py>




<segmentation_fault.py>



-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to