【发布时间】:2018-02-10 11:27:32
【问题描述】:
我有一个 Django 应用程序并使用 Celery 来处理长时间运行的任务。
假设我需要生成一个文件(需要 5 秒),将其附加到电子邮件中并将其发送给 1000 个用户,这些方法中哪个是首选方式?
方法 1:For 循环外部任务 - 生成计数后台任务,每个运行几秒钟
@share_task
def my_task(usr):
#gen file + send email...
def send_to_all_users(users): # called to start task
for usr in users:
my_task.delay(usr)
方法 2:任务内的 For 循环 - 生成 1 个可能运行数小时的后台任务
@share_task
def my_task(users):
for usr in users:
#gen file + send email...
def send_to_all_users(users): # called to start task
my_task.delay(users)
使用方法 1,我可以增加工作人员的数量以更快地完成整个任务,但创建所有这些任务可能需要一段时间,而且我不确定我的任务队列是否可以填满然后作业被丢弃?
方法2看起来更简单,但运行时间可能会很长,而且我无法扩大worker的数量。
不确定这是否重要,但我的应用程序在 Heroku 上运行,并且我使用 Redis 作为消息代理。我目前正在使用单个后台工作人员。
【问题讨论】: