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/