469,599 Members | 2,857 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,599 developers. It's quick & easy.

[pysqlite] How do I use pysqlite in a multi-threading env.?

In my wxPython-app a part of it gathers data, when a button is pressed, and
stores it into a db.

The GUI part should display the stuff being stored in the db.

When both parts work on the same connection, I get "SQL statements in
progress errors". Seems ok to me, you can't do that.

So, next step: Both parts get a separate connection. Now I get "Database
locked" errors. Hmm, yes, it's GUI stuff after all, being all in the same
thread.

So, next step: I put the data gathering part into a real thread, that's
started, wehn the "Scan" button is pressed. This way the "Database locked"-
errors should got away. But now I get "SQLite objects created in a thread
can only be used in that same thread.The object was created in thread id
3576 and this is thread id 1040". Hmm, true, I want to display db content,
that was stored by an other thread. But that's what multi-threading
capabilities are for!

I must be missing something here. Anyway, I'm a bit lost now, really. So,
how are you doing such stuff with pysqlite?

Kind regards
Franz GEIGER


Jul 19 '05 #1
2 1877
On Fri, May 20, 2005 at 08:42:54AM +0200, F. GEIGER wrote:
In my wxPython-app a part of it gathers data, when a button is pressed, and
stores it into a db.

The GUI part should display the stuff being stored in the db.

When both parts work on the same connection, I get "SQL statements in
progress errors". Seems ok to me, you can't do that.
You get that error message with which pysqlite call?
So, next step: Both parts get a separate connection. Now I get "Database
locked" errors. Hmm, yes, it's GUI stuff after all, being all in the same
thread.
One connection did not commit() or rollback() within the default
timeout (5 seconds). SQLite is not a good solution if you need
long transactions, because other SQLite connections are blocked, then.
So, next step: I put the data gathering part into a real thread, that's
started, wehn the "Scan" button is pressed. This way the "Database locked"-
errors should got away. But now I get "SQLite objects created in a thread
can only be used in that same thread.The object was created in thread id
3576 and this is thread id 1040". Hmm, true, I want to display db content,
that was stored by an other thread. But that's what multi-threading
capabilities are for!
Yes, but pysqlite's threadsafety level is 1, that means you cannot share
a connection object among multiple threads. In order to ensure that and
to avoid that you get random and unexplainable crashes, I implemented
this warning.
I must be missing something here. Anyway, I'm a bit lost now, really. So,
how are you doing such stuff with pysqlite?


Use multiple connections and commit/rollback early.

HTH,

-- Gerhard
--
Gerhard Häring - gh@ghaering.de - Python, web & database development

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)

iD8DBQFCjZBDdIO4ozGCH14RAjnnAJ9mc+xjol3Ya8AyhQKByb 6EuKmrRwCfRsjQ
aH9eY/8sZk2VKt5ufoZwVX0=
=X36A
-----END PGP SIGNATURE-----

Jul 19 '05 #2

"Gerhard Haering" <gh@ghaering.de> schrieb im Newsbeitrag
news:ma*************************************@pytho n.org...

I've completely rewritten the db handling stuff, which formerly did too much
behind the scenes (explicit is better than implicit...). Now everything
looks much better. No unexpected errors and - most important - locking works
as expected. I have no idea yet, what went wrong with the former (probably
more pythonic) solution. It always did it with MySQL as backend.

Anyway, I'm quite happy now, that I can work on a db, that is incorporated
into the app itself.

Thanks for your help, Gerhard! And, sorry for the troubles...

Kind regards
Franz GEIGER
Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by Martin Maney | last post: by
6 posts views Thread by Rob Cowie | last post: by
1 post views Thread by DurumDara | last post: by
1 post views Thread by Michael Husmann | last post: by
14 posts views Thread by Nader Emami | last post: by
5 posts views Thread by =?ISO-8859-1?Q?Gerhard_H=E4ring?= | last post: by
4 posts views Thread by Tilman Kispersky | last post: by
4 posts views Thread by guiromero | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.