Strange crashes

Igor Korot ikorot01 at gmail.com
Thu Dec 12 00:47:21 EST 2013


Hi, Chris,

On Wed, Dec 11, 2013 at 9:31 PM, Chris Angelico <rosuav at gmail.com> wrote:
> On Thu, Dec 12, 2013 at 4:25 PM, Igor Korot <ikorot01 at gmail.com> wrote:
>> ProgrammingError: SQLite objects created in a thread can only be used
>> in that same thread.The object was created in thread id 14260 and this
>> is thread id 9264
>>
>> Where should I start looking for causes?
>
> Well, I'd look for something that creates an SQLite object on one
> thread and uses it on another :)
>
> More generally, your issue is probably due to sharing things across
> threads that shouldn't be shared. That's going to give all sorts of
> race conditions that you might never be able to replicate - the exact
> order of operations might depend on any number of factors, even stuff
> you wouldn't expect to have ANY significance like the speed of your
> hard drive. The fact that it works on your system is indicative of
> luck.
>
> See if you can avoid *any* mutable globals in your thread handlers, or
> if you can't achieve that, have a good hard look at every global that
> any thread other than the main thread can change. The less you have to
> look at, the easier it'll be to find this sort of thing.

I was afraid to the answer like this. ;-)
The codebase is huge and it a lot of queries with connect/execute/disconnect.

So, when I find the culprit variable what do I do?
Make it a part of some class? Protect it with mutex?

How to solve this? And most importantly, how do _I_ verify that its solved?

Thank you.

>
> ChrisA
> --
> https://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list