Desde su Wikipedia page:
varios procesos informáticos o hilos pueden acceder a la misma base de datos sin problemas. Varios accesos de lectura se pueden satisfacer en paralelo.
Más precisamente, desde su FAQ:
procesos múltiples pueden tener la misma base de datos abiertos al mismo tiempo. Múltiples procesos pueden estar haciendo un SELECTO al mismo tiempo. Pero solo un proceso puede hacer cambios en la base de datos en cualquier momento en el tiempo.
Una sola escritura a la base de datos, sin embargo, hace bloquear la base de datos por un corto tiempo para que nada se puede acceder a él en absoluto (ni siquiera la lectura). Los detalles se pueden encontrar en File Locking And Concurrency In SQLite Version 3. Básicamente, leer la base de datos no es un problema a menos que alguien quiera escribir en la base de datos de inmediato. En ese caso, el DB se bloquea exclusivamente por el tiempo que lleva ejecutar esa transacción y el bloqueo se libera después. Sin embargo, los detalles son escasos sobre qué es exactamente lo que hace con las operaciones de lectura en el paquete de datos en el momento de un bloqueo PENDIENTE o EXCLUSIVO. Supongo que devuelven SQLITE_BUSY
o bloquean hasta que puedan leer. En el primer caso, no debería ser demasiado difícil simplemente volver a intentarlo, especialmente si espera pocas escrituras.
Esto es mejor que la respuesta aceptada, que se escribió antes de que estuviera disponible el modo WAL. – Stretch