title: python: how to share an sqlite connection among threads with queues?
body: <p>I'm using Python 3.2.1 on Arch Linux x86_64.<br>
  I'm trying to update an sqlite database in a threaded, timed loop with some code similar to the following:</p>
  
  <pre><code>import sqlite3
  from threading import Timer
  from queue import Queue
  
  class DBQueue(Queue):
      def give(self, item):
          self.task_done()
          self.join()
          self.put(item)
          return True
  
  
  def timer():
      print('A')
      Timer(3, add).start()
  
  
  def add():
      print('B')
      db = qdb.get()
      cur = db.cursor()
      cur.execute('INSERT INTO Foo (id) VALUES (NULL)')
      qdb.give(db)
      timer()
  
  qdb = DBQueue()
  # SOLUTION #1:
  # qdb.put(sqlite3.connect(':memory:', check_same_thread=False))
  # SOLUTION #2: see Eli Bendersky's answer
  qdb.put(sqlite3.connect(':memory:'))
  db = qdb.get()
  cur = db.cursor()
  cur.execute('CREATE TABLE Foo (id INTEGER PRIMARY KEY)')
  qdb.give(db)
  timer()
  </code></pre>
  
  <p>which unfortunately returns:</p>
  
  <pre><code>A
  B
  Exception in thread Thread-1:
  Traceback (most recent call last):
    File "/usr/lib/python3.2/threading.py", line 736, in _bootstrap_inner
      self.run()
    File "/usr/lib/python3.2/threading.py", line 942, in run
      self.function(*self.args, **self.kwargs)
    File "/home/dario/dev/python/prova/src/prova4.py", line 27, in add
      cursor = db.cursor()
  sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140037302638336 and this is thread id 140037262886656
  </code></pre>
  
  <p>Sharing only a cursor doesn't give better results:</p>
  
  <pre><code>conn = sqlite3.connect(':memory:')
  qdb.put(conn.cursor())
  </code></pre>
  
  <p>I'm quite sure I haven't understood at all how to use queues to share databases among threads, can anybody help me?
  Thank you!</p>