我的应用程序中的用户可以将从API获取的数据导入到我的Django数据库中。如果要提取> 100个以上的结果,则该API使用分页。
我显然不希望用户等待大量可能导入的项目。因此,我要在请求中首先调用API,然后将其余的委托给Celery。
> User requests an API item with 250 items
> Fetch 100 and return
> Fetch 150 more in a celery task
我担心数据库损坏。我在Heroku上使用以下Procfile中的配置运行我的应用程序:
web: daphne app.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py migrate --noinput && python manage.py runworker -v2
celerybeat: celery -A app beat -l info
celeryworker: celery -A app worker -l info
我这样称呼任务:
if rginitial_count >= 100:
continue_doing_imports.delay(artist_mbid=self.mbid,
artist_name=self.name,
offset=100)
如何确保行为一致?例如,user A
正在导入Artist X
的数据,同时user B
试图订阅该艺术家,因此需要写他的关系吗?这是我能想到的一种情况。