WSGI/Colubrid + SQLObject - Threading-Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

WSGI/Colubrid + SQLObject - Threading-Problem

Beitragvon henning » Mittwoch 7. Juni 2006, 12:18

Mir ist anscheinend, was Kombinationen von sql-backends und web-frontends angeht mit Python kein Glück beschieden.
Ich will jetzt möglichst schnell von mod_python + direktem mysql zu wsgi/colubrig + sqlobject konvertieren und allmählich gibtsa auch sowas wie nen tatsächlichen Zeitdruck bei der Sache.

Dummerweise meckert SQLObject aber rum, ich solle eine Verbindung nur innerhalb des selben threads benutzen.
Da ich selbst aber kjein zusätzliches threading implementiert habe, muss das ein grundsätzlicheres Problem sein.
Ich habe extra process_request überschrieben und weise da dem connection-hub jedes mal eine frische Verbindung zu:

Code: Alles auswählen

  def process_request(self):
    dbmfile = join(getcwd(), 'data.dbm')
    sqlhub.threadConnection = connectionForURI('sqlite://' + dbmfile)
    r = super(Application, self).process_request()
    return r


Es spielt auch keine Rolle, ob ich threadConnection oder processConnection verwende, der Fehler ist immer wieder:

Code: Alles auswählen

...    return iter(list(self.lazyIter()))
  File "/home/asmanian/uniDB/sqlobject/sresults.py", line 157, in lazyIter
    return conn.iterSelect(self)
  File "/home/asmanian/uniDB/sqlobject/dbconnection.py", line 361, in iterSelect
    select, keepConnection=False)
  File "/home/asmanian/uniDB/sqlobject/inheritance/iteration.py", line 10, in __init__
    super(InheritableIteration, self).__init__(dbconn, rawconn, select, keepConnection)
  File "/home/asmanian/uniDB/sqlobject/dbconnection.py", line 683, in __init__
    self.cursor = rawconn.cursor()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 16386 and this is thread id 65538


Das ganze wird genau dann ausgelöst, wenn ich die SQL-Verbindung das erste mal wirklich verwenden will (in diesem Fall will ich nen user aus der datanbank raussuchen).

Weiß jemand, was da vor sich geht und kann es mir erklären oder mir sonst irgdnwie helfen, dieses Problem zu lösen?
Es eilt wirklich ein wenig :-/
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Mittwoch 7. Juni 2006, 13:07

Das ist ein häufiges SQLObject problem. Beste lösung: sqlalchemy verwenden. workaround: svn version von sqlobject verwenden
TUFKAB – the user formerly known as blackbird
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Donnerstag 8. Juni 2006, 03:20

Thnx blackbird, mit sqlalchemy klappts wunderbar und es scheint auch noch ein wenig flexibler zu sein bei weniger "Magie" (in den wrapper-objekten etc...)

:-D

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder