Юнит-тест Django с параллельным доступом к базе данных выдает ошибку блокировки базы данных
Я пишу несколько модульных тестов Django для проверки поведения моего приложения при одновременном обращении к нему нескольких клиентов. Для этого я написал тесты следующего вида:
from django.test import TestCase
from django.db import connection
from django.db import transaction
class ApplicationTestCase(TestCase):
def test_parallel(self):
@transaction.atomic
def local_provision(i):
with connection.cursor() as cursor:
# Some SQL commands that read and write the person table.
# These commands take less than one second.
return f"done with {i}"
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(local_provision, i) for i in range(5)]
for future in concurrent.futures.as_completed(futures):
print(future.result())
Когда я запускаю этот модульный тест, я получаю непосредственную ошибку:
django.db.utils.OperationalError: database table is locked: person
Я попробовал изменить таймаут в файле settings.py, но это ничего не изменило.
Почему SQLite не ждет, пока файл не будет разблокирован, а затем повторяет попытку? Как заставить SQLite повторить попытку?