У меня есть приложение Django, которое имитирует Instagram, в котором пользователи загружают фотографии или мемы, а затем их поклонники получают уведомление об указанной фотографии.
В настоящее время, чтобы отправлять уведомления, как только пользователь загружает фотографию, я перебираю всех фанатов, которые есть у загрузчика, добавляю уведомления в список, а затем bulk_create
объекты. Как в:
fans = UserFan.objects.filter(star=user).values_list('fan',flat=True)
fan_list = []
for fan in fans:
fan_list.append(PhotoObjectSubscription(viewer_id=fan, which_photo=photo, updated_at=time, seen=False, type_of_object='1'))
PhotoObjectSubscription.objects.bulk_create(fan_list)
Простые вещи. Обратите внимание, что у меня также установлено supervisord
на виртуальной машине моего приложения, где я запускаю некоторые элементарные задачи через celery
(с redis
в качестве брокера сообщений).
Теперь я хочу выполнить задачу bulk_create
выше как celery task
; асинхронно. Мой код bulk_create
живет в том же представлении, которое используется для обработки загрузки фотографий, поэтому я считаю, что выполнение этого асинхронно ускорит этот процесс для пользователя.
Я новичок в задачах celery
, поэтому может ли кто-нибудь указать на наглядном примере, как я могу превратить вышеупомянутую задачу bulk_create
в задачу celery
? Я провел исследование, и вот что я думаю, что мне нужно сделать:
1) Добавьте delay()
в конце оператора bulk_create
:
PhotoObjectSubscription.objects.bulk_create(fan_list).delay()
2) В tasks.py
добавьте новую задачу для обработки вышеперечисленного:
@task
def bulk_create_notifications():
PhotoObjectSubscription.objects.bulk_create(fan_list)
3) В CELERYBEAT_SCHEDULE
в settings.py
ничего добавлять не нужно, так как задача не периодическая.
Я, наверное, не совсем прав, так что, пожалуйста, помогите.