【问题标题】:How To Perform asynchronous task in django?如何在 django 中执行异步任务?
【发布时间】:2017-11-10 01:13:05
【问题描述】:

我有点迷路了。我想在发布请求上使用 django 发送电子邮件。但我不希望用户等待回复,所以我在后台线程中发送它。此外,电子邮件将按用户提供的顺序每 30 秒发送一次。

但是用户可以选择取消发送电子邮件,即处理取消输入的不同发布请求。

如何在发送邮件的线程中监听取消操作? 如何实现 30 秒延迟? 我想过使用睡眠,但如果我这样做,它会跳过取消信号吗?

【问题讨论】:

  • 您应该小心 WSGI 应用程序中的额外线程。它们经常在 WSGI 服务器中引起麻烦。您可以将要发送的邮件存储在数据库中,并运行一个额外的进程作为管理命令来发送它们。
  • 我同意@KlausD.,您可以在数据库和相关字段中输入该电子邮件的状态。另一个脚本将从数据库中侦听这些并以某个定义的时间间隔进行访问。如果您在两者之间收到取消请求。将这些电子邮件的状态更改为已取消。
  • 似乎是芹菜的完美用例......
  • 除了经典的 Celery 方法外,您还可以查看频道:channels.readthedocs.io

标签: python django multithreading asynchronous


【解决方案1】:

如上所述,可能是使用 Celery 任务异步发送电子邮件的情况。然后,为了取消电子邮件发送,您处理 POST(用于取消)请求的视图可能会撤销负责发送该电子邮件序列的任务。这个question/answer 展示了如何做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多