Desde las preguntas frecuentes de SQLite he sabido que:
Varios procesos pueden tener la misma base de datos abierta al mismo tiempo. Se pueden hacer múltiples procesos
SELECT
al mismo tiempo. Sin embargo, solo un proceso puede hacer cambios en la base de datos en cualquier momento.
Así, en lo que a entender que puedo: 1) Leer db desde varios subprocesos ( SELECT
) 2) Leer db desde varios subprocesos ( SELECT
) y escribir desde un solo hilo ( CREATE
, INSERT
, DELETE
)
Pero leí sobre el registro de escritura anticipada que proporciona más concurrencia ya que los lectores no bloquean a los escritores y un escritor no bloquea a los lectores . La lectura y la escritura pueden continuar simultáneamente.
Por último, tengo completamente confusa cuando descubrí que , cuando se especifica:
Aquí hay otras razones para obtener un error SQLITE_LOCKED:
- Intentando
CREATE
oDROP
una tabla o índice mientras unaSELECT
declaración aún está pendiente.- Intentando escribir en una tabla mientras a
SELECT
está activo en esa misma tabla.- Intentando hacer dos
SELECT
en la misma tabla al mismo tiempo en una aplicación multiproceso, si sqlite no está configurado para hacerlo.- fcntl (3, falla la llamada F_SETLK en el archivo DB. Esto podría deberse a un problema de bloqueo de NFS, por ejemplo. Una solución para este problema es eliminar el DB y copiarlo de nuevo para que tenga un nuevo valor de Inode
Entonces, me gustaría aclarar por mí mismo, ¿es necesario evitar el bloqueo? ¿Puedo leer y escribir al mismo tiempo desde dos hilos diferentes? Gracias.
isolation_level=None
embargo, tuve problemas de bloqueo hasta un set . Sin el modo de caché compartida, ¿cómo comparto instancias entre subprocesos?