根据用户给定的时间周期性地做一个任务运行
Make a task run periodically with time given by user
我必须构建一个 Django 应用程序,以向用户发送电子邮件通知。但是用户想要设置发送电子邮件的时间段。我读到 celery 有一个周期性任务功能,但是时间必须事先设置,那么我怎么能用用户给定的时间用 celery 做一个周期性任务呢?
class UserMail(models.Model):
user_mail = models.EmailField()
auto_send_mail = models.BooleanField(default=False)
time_set = models.TimeField(blank=True,null=True)
时间设置为获取用户在表单中 post 时给出的时间。
获取更多详细信息
我认为 this 这篇文章可以帮助您。
另一种选择是设计一个周期性任务 运行 每 1 分钟一次,它将查询 UserMail
以检查某些记录是否在一分钟内确实有 time_set
并发送电子邮件。
另请注意,celery 中的周期性任务调度程序并非设计用于处理数千个计划任务。
所以基本上你想用用户输入的时间创建任务。 O 拥有的是 API,我以 POST 请求的形式接受用户的输入。
在这里,我将用户发送的数据保存在一个名为response 的变量中。
然后,我们用用户给定的时间(以分钟为单位)创建一个时间表。
最后我们制作所需的周期性任务。在您的情况下,如果您的应用程序名为 resources 的 tasks.py 文件中有一个名为 send_mail 的函数,代码将如下所示。
response = request.data.copy()
schedule, created = IntervalSchedule.objects.get_or_create(
every=response['interval'],
period=IntervalSchedule.MINUTES,
)
task = PeriodicTask.objects.create(
interval=schedule,
name=f'{send mail task for user {self.request.user.id}| '
task='urlmonitor.tasks.send_mail',
args=json.dumps([self.request.user.email]),
# expires=datetime.utcnow() + timedelta(seconds=30)
)
我必须构建一个 Django 应用程序,以向用户发送电子邮件通知。但是用户想要设置发送电子邮件的时间段。我读到 celery 有一个周期性任务功能,但是时间必须事先设置,那么我怎么能用用户给定的时间用 celery 做一个周期性任务呢?
class UserMail(models.Model):
user_mail = models.EmailField()
auto_send_mail = models.BooleanField(default=False)
time_set = models.TimeField(blank=True,null=True)
时间设置为获取用户在表单中 post 时给出的时间。
我认为 this 这篇文章可以帮助您。
另一种选择是设计一个周期性任务 运行 每 1 分钟一次,它将查询 UserMail
以检查某些记录是否在一分钟内确实有 time_set
并发送电子邮件。
另请注意,celery 中的周期性任务调度程序并非设计用于处理数千个计划任务。
所以基本上你想用用户输入的时间创建任务。 O 拥有的是 API,我以 POST 请求的形式接受用户的输入。
在这里,我将用户发送的数据保存在一个名为response 的变量中。 然后,我们用用户给定的时间(以分钟为单位)创建一个时间表。 最后我们制作所需的周期性任务。在您的情况下,如果您的应用程序名为 resources 的 tasks.py 文件中有一个名为 send_mail 的函数,代码将如下所示。
response = request.data.copy()
schedule, created = IntervalSchedule.objects.get_or_create(
every=response['interval'],
period=IntervalSchedule.MINUTES,
)
task = PeriodicTask.objects.create(
interval=schedule,
name=f'{send mail task for user {self.request.user.id}| '
task='urlmonitor.tasks.send_mail',
args=json.dumps([self.request.user.email]),
# expires=datetime.utcnow() + timedelta(seconds=30)
)