Hola,
  yo me encontré con el mismo problema y lo resolví así:
* conexión: con=sqlite3.connect(sfich, isolation_level='DEFERRED', check_same_thread = False) De esta manera, el driver de SQLite no comprueba si es el mismo thread o no * SIEMPRE que voy a usar SQLite, lo hago en una sección crítica rodeada de un bloqueo:
   + Objeto de bloqueo: lock=threading.Lock()
   + Comienzo de sección crítica: lock.acquire()
   + Final de sección crítica:
     finally:
         lock.release()

Un saludo!



El 31/08/2012 2:14, Miguel Barraza escribió:
buenas, también ya lo intenté.
creé una clase master que era la única que tenga la conexión a bd.
pero cuando el hilo llama a esta clase, me tira el mismo error, ya que detecta que está consultando desde un hilo que no es el master. pero bueno...seguiré intentando haber si ahi otra forma de hacer lo mismo sin hilos. pero que funcione con el mismo rendimiento.
un saludo.
atte, Miguel
*Subject:* Re: [Python-es] problema con sqlite3 y hilos


    no se usar sqlite pero se me ocurre una idea
    si el problema es k el segundo hilo no puedo usar el sql, crea en
    la clase del hilo principal métodos para consultar el sqlite y
    llamas esos métodos desde el hilo
    algo como esto: hacer una clase server, una clase cliente y una
    clase proxy
    server espera nuevos clientes y cuando se conecta uno lanza un
    hilo cliente
    proxy se ejecuta en su propio hilo, tiene acceso a la base de
    datos y los métodos k sean necesarios para consultarla
    cliente llama a los métodos de la clase-hilo proxy, creo k así los
    métodos se ejecutorian en el hilo del proxy... no estoy seguro d
    como hacer para k el hilo de proxy no se cierre solo, se me ocurre
    hacer k proxy abra una ventana vacía, incluso la puedes poner en
    segundo plano, y las llamadas de los clientes serian como eventos
    de la ventana
    no se mucho de hilos pero si el problema es k no se puede
    consultar sqlite desde otro hilo, pues hacer k un solo hilo haga
    las consultas

    ------------------------------------------------------------------------
    From: cor...@miguelbarraza.com.ar
    To: python-es@python.org
    Date: Thu, 30 Aug 2012 00:24:29 -0300
    Subject: [Python-es] problema con sqlite3 y hilos

    buenas, estoy haciendo una aplicación con sockets, cada cliente lo
    atiende en un hilo diferente.
    cada cliente hace consultas a una base sqlite3.
    pero al consultar me tira este error:
        self.db.execute(sql)
    ProgrammingError: SQLite objects created in a thread can only be
    used in that sa
    me thread.The object was created in thread id 2480 and this is
    thread id 3740
    al inicio hacía una sola conexión y le pasaba el puntero de
    conexión a el objeto que manejaba el cliente.
    pensé que ese era el error, así que hice una conexión por cada
    cliente dentro de la clase que gestiona cada conexión. y me tira
    el mismo error...así que llegué a la conclusión que sqlite no
    funciona con hilos...¿es eso cierto?...o de que forma puedo
    solucionar este problema?.
    lo que hice también fue hacer una conexión dentro de un objeto y
    pasar el puntero de ese objeto a todos los clientes, y hacer
    consultas a esa clase master para que devuelva los datos de base
    de datos. y igualmente tiró el mismo error.
    imagino que debe haber forma de trabajar con sqlite3 y hilos.
    así que por eso consulto: alguien se vio en este problema?, como
    lo pudo solucionar?.
    saludos a todos!.
    pd.: no copio parte del código ya que es bastante y no se donde
    exactamente podría estar el error...aunque como lo probé de varias
    formas y siempre tiró el mismo error creo que es la metodología,
    no es el código...tiene que haber alguna forma que no conozco para
    utilizar sqlite con hilos o procesos.
    atte, Miguel

    _______________________________________________ Python-es mailing
    list Python-es@python.org
    http://mail.python.org/mailman/listinfo/python-es FAQ:
    http://python-es-faq.wikidot.com/

    ------------------------------------------------------------------------
    _______________________________________________
    Python-es mailing list
    Python-es@python.org
    http://mail.python.org/mailman/listinfo/python-es
    FAQ: http://python-es-faq.wikidot.com/



_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Corporación RTVE -   www.rtve.es AVISO LEGAL.  Este mensaje está dirigido sólo 
a su destinatario y es confidencial. Si lo ha recibido por error, notifíquelo 
al remitente y borre el original. Cualquier uso inapropiado de este correo 
electrónico queda desautorizado. RTVE se reserva el ejercicio de las acciones 
legales oportunas contra quien acceda de forma ilegítima al contenido de 
cualquier mensaje de su procedencia.  Antes de imprimir este e-mail, piensa 
bien si es necesario hacerlo. Una tonelada de papel implica la tala de 15 
árboles. Cuida el medio ambiente. 
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a