Django & Celery: Нужен ли транзакции.atomic / lock для того, чтобы избежать гонок? - PullRequest
0 голосов
/ 26 июня 2018

Пользователи в моем приложении могут импортировать данные, полученные из API, в мою базу данных Django. API использует пейджинг, если для выборки> 100 результатов.

Я, очевидно, не хочу, чтобы пользователи ожидали импорта большого количества элементов. Итак, я делаю первый вызов API в запросе, а затем делегирую остальное Celery.

> User requests an API item with 250 items
> Fetch 100 and return
> Fetch 150 more in a celery task

Я беспокоюсь о повреждении базы данных. Я запускаю свое приложение на Heroku.

Я называю задачу так:

        if rginitial_count >= 100:
            continue_doing_imports.delay(artist_mbid=self.mbid,
                                         artist_name=self.name,
                                         offset=100)

Как я могу обеспечить последовательное поведение? например, user A импортирует данные для Artist X, и в то же время user B пытается подписаться на того же артиста, поэтому ему необходимо написать его отношения? это один из сценариев, о котором я могу подумать.

...