On 2/28/18 3:18 PM, Frank Millman wrote: > > On 2/28/18 2:53 PM, Richard Damon wrote: > > > > > On 2/28/18 6:59 AM, Frank Millman wrote: > > > Hi all > > > > > > I am using Python 3.6.0 and sqlite3 3.20.1. I am getting the message > > > ‘database is locked’ which, from reading the docs, I think is coming from > > > an SQL_BUSY error. > > > > > > It does not behave in the way I expect. > > [...] > > > > Your description, seeming to imply a total order, has an issue. If this > > is happening in a single thread, then if it uses a second connection to > > try and insert, that will block and the thread will never get to step 3, > > so the commit will not happen. You have a dead lock. > > > > Of course! I should have thought of that. > I am using python’s asyncio module, so everything is happening in a single > thread. > I understand what is happening now. Thanks very much.
> For the record, in case anyone runs into a similar situation, I found an effective solution. I try to keep my transactions as short as possible, but with multiple connections running in the same thread it is possible that one of them starts a transaction before another one has committed. To control that, I created an asyncio.Lock(), which is acquired at the start of the transaction and released after the commit. Problem solved. I tested with 10 concurrent connections, and they all updated perfectly, with hardly any slowdown. Frank _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users