Python 让任务在用户指定的时间内定期运行
我必须构建一个Django应用程序,向用户发送电子邮件通知。但是用户希望设置发送电子邮件的时间段。我读到芹菜有一个周期性任务功能,但是时间必须事先设置好,那么我如何用芹菜制作一个由用户给定时间的周期性任务呢Python 让任务在用户指定的时间内定期运行,python,django,celery,Python,Django,Celery,我必须构建一个Django应用程序,向用户发送电子邮件通知。但是用户希望设置发送电子邮件的时间段。我读到芹菜有一个周期性任务功能,但是时间必须事先设置好,那么我如何用芹菜制作一个由用户给定时间的周期性任务呢 class UserMail(models.Model): user_mail = models.EmailField() auto_send_mail = models.BooleanField(default=False) time_set = models.Ti
class UserMail(models.Model):
user_mail = models.EmailField()
auto_send_mail = models.BooleanField(default=False)
time_set = models.TimeField(blank=True,null=True)
设置时间以获取用户在表单中发布时给定的时间。使用线程。
您可以在上获得更多详细信息,我认为这篇文章可以帮助您满足需要
另一个选项是设计一个周期性任务,每1分钟运行一次,该任务将查询UserMail
,以检查某些记录是否在分钟内设置了时间,并发送电子邮件。
还要注意的是,Cellery中的定期任务调度器并不是为处理数千个计划任务而设计的。因此,基本上您希望使用用户输入的时间创建任务。O拥有的是一个API,我以POST请求的形式从用户那里获取输入
在这里,我处理了用户在名为response的变量中发送的数据。
然后,我们用用户给定的时间(以分钟为单位)创建一个时间表。
最后,我们完成所需的周期性任务。在您的例子中,如果在名为resources的应用程序中有一个名为send_mail In tasks.py file的函数,则代码如下所示
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)
)
您可以使用芹菜ETA,因此当用户保存时间设置时,您可以使用timedelta向芹菜添加任务。您好,请修复您的缩进!嗨,亚当,谢谢你的通知。我修正了压痕。