Задать вопрос
@keddad
Ученик

Может ли состояние гонки в многопоточном приложении вызывать проблемы при работе с БД и как с ним бороться?

У меня есть Python - приложение с Huey (менеджер задач). Когда мне приходит внешний запрос, я вызываю некоторый пайплайн, n раз для каждого запроса:

pipe = (
        fetch_page.s(link)
            .then(process_page)
            .then(process_image)
    )

    huey.enqueue(pipe)


По сути, каждая функция пайплайна, кроме первой и последней, получает некоторый _id, который соответствует id документа в Mongo, и возвращает _id. Проблема в том, что не всегда эти _id успевают нормально обработаться - т.е первая функция отправляет в БД документ и возвращает некоторый id, а принимающая функция либо ловит Excepton от того, что GridFS не может найти файл, либо вместо объекта возвращает None если это обычный документ Mongo. Как мне избавиться от такого лага? Сейчас единственным выходом я вижу только сделать принудительную задержку между запуском функций пайплайна, но это звучит как отвратительный вариант.
  • Вопрос задан
  • 106 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@keddad Автор вопроса
Ученик
Понял, что забыл ответить на вопрос здесь. Нет, если вы не отключали функцию asknowledged writes, это не вызовет проблем: к моменту, когда insert_one вернет ID, документ гарантированно будет сохранен в коллекцию. Ref: stackoverflow.com/questions/59666342/does-pymongo-...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы