【发布时间】:2016-09-28 19:16:40
【问题描述】:
我有一个模仿 Instagram 的 Django 应用程序,用户上传照片或模因,然后他们的粉丝会收到有关照片的通知。
目前,为了发送通知,一旦用户上传照片,我会遍历上传者拥有的每个粉丝,将通知附加到列表中,然后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)
简单的东西。请注意,我还在应用程序的 VM 上安装了 supervisord,我通过 celery 运行一些基本任务(redis 作为消息代理)。
现在我想以celery task 的身份执行上面的bulk_create 任务;异步。我的bulk_create 代码位于用于处理照片上传的同一视图中,因此我认为异步执行此操作将为用户加快该过程。
我是celery 任务的新手,所以有人可以通过说明性示例指出我如何将上述bulk_create 任务变成celery 任务吗?我已经完成了研究,这就是我认为我需要做的事情:
1) 在bulk_create 语句末尾添加delay():
PhotoObjectSubscription.objects.bulk_create(fan_list).delay()
2) 在tasks.py中,添加一个新的任务来处理上面的内容:
@task
def bulk_create_notifications():
PhotoObjectSubscription.objects.bulk_create(fan_list)
3) 无需在settings.py 中向CELERYBEAT_SCHEDULE 添加任何内容,因为该任务不是周期性任务。
我可能不完全正确,所以请帮忙。
【问题讨论】:
标签: python django celery django-celery celery-task