python - Django 任务、提醒、通知

标签 python django redis rabbitmq celery

我在 Django(Apache、Ubuntu)中有一个相当简单的 Web 应用程序,用于保存一些 session 文档。 session 的约会时间以日期时间格式存储在数据库(postgres)中。现在,我想要一个自定义提醒模块,使用户能够设置他们喜欢的提醒。

例如:

session 将在特定日期(比如 2018 年 4 月 25 日,晚上 8 点)举行,用户应该能够设置自定义提醒(例如通过 SMS,但问题不在于发送文本或电子邮件- 我得到了这个)在开会前 24 小时被解雇。

这让我想到这需要某种永久性流程来浏览 session 表并检查 now() 是否是约会时间 -24 小时,如果是则执行提醒。

我从 rabbitmq 和 celery 开始,但乍一看它们有点复杂 ( here's one of the tutorials I found ),看起来它不是为我需要的而设计的。

那么,问题是 - 如何设置一个永久流程来检查现在是否设置了提醒时间,如果是 - 执行提醒任务?


编辑:尝试按照教程回答后出现一些错误。卡在第 3 步:

    (dj2_env) adrian@dev:~$ celery -A dj2 worker -l info
Traceback (most recent call last):
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/app/utils.py", line 361, in find_app
    found = sym.app
AttributeError: module 'dj2' has no attribute 'app'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/adrian/dj2_env/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/__main__.py", line 14, in main
    _main()
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/celery.py", line 326, in main
    cmd.execute_from_commandline(argv)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/base.py", line 279, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/base.py", line 481, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/bin/base.py", line 503, in find_app
    return find_app(app, symbol_by_name=self.symbol_by_name)
  File "/home/adrian/dj2_env/lib/python3.5/site-packages/celery/app/utils.py", line 366, in find_app
    found = sym.celery
AttributeError: module 'dj2' has no attribute 'celery'

好的,弄清楚了上面的错误 - 然而这很奇怪,因为当我从 dj2(项目)目录运行 worker 命令时它起作用了 8|

最佳答案

您可以为此使用 celery 和 rabbitmq。在 celery 中有一种叫做周期性任务的东西,它可以让你在给定的特定时间运行任务,就像 cron 作业一样。

这是Asynchronous tasks in Celery的简单教程

它很好地理解了 celery 的工作原理。它还包括配置等。

您可能需要做的是启动一个任务(每 15 分钟),查询数据库并检查接下来 24 小时内的 session ,然后通知用户。教程的第 4 部分展示了如何使用周期性任务。

关于python - Django 任务、提醒、通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49841474/

相关文章:

python - Django:新版本Django中的DisallowedHost

python - Django模型查询

redis - 通过 Resque 从 Padrino 异步发送电子邮件

python - 是否有 IDE/实用程序来重构 Python * 导入以使用标准 module.member 语法?

python - 如何安装 pyCurl?

python - django 1.11.3 css 背景图片不显示

python - Django mysqlclient 后端在 Windows 中产生 django.db.utils.OperationalError : (2059, <NULL>)

python - 如何测量 Django 中的数据库连接时间

Ubuntu 16.04 systemd redis 与 ulimit 的问题

performance - Redis集群性能——低负载超时率高