Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django任务、提醒、通知_Python_Django_Redis_Rabbitmq_Celery - Fatal编程技术网

Python Django任务、提醒、通知

Python Django任务、提醒、通知,python,django,redis,rabbitmq,celery,Python,Django,Redis,Rabbitmq,Celery,我在Django(Apache,Ubuntu)中有一个相当简单的web应用程序,用于保存一些会议文档。会议的约会时间以日期时间格式存储在数据库(postgres)中。现在,我想有一个自定义的提醒模块,可以让用户设置他们的首选提醒 例如: 会议将在某个日期举行(比如2018年4月25日晚上8:00),用户应该能够在会议开始前24小时设置一个自定义提醒(例如,通过短信,但问题不是发送短信或电子邮件-我已经涵盖了这一点) 这让我想到,这需要一个永久性的过程,浏览会议桌,检查now()是否是约会时间-2

我在Django(Apache,Ubuntu)中有一个相当简单的web应用程序,用于保存一些会议文档。会议的约会时间以日期时间格式存储在数据库(postgres)中。现在,我想有一个自定义的提醒模块,可以让用户设置他们的首选提醒

例如:

会议将在某个日期举行(比如2018年4月25日晚上8:00),用户应该能够在会议开始前24小时设置一个自定义提醒(例如,通过短信,但问题不是发送短信或电子邮件-我已经涵盖了这一点)

这让我想到,这需要一个永久性的过程,浏览会议桌,检查now()是否是约会时间-24小时,如果是,则执行提醒

我从rabbitmq和芹菜开始,但乍看起来有点复杂(),看起来它不是为我需要的东西而设计的

所以,问题是-如何设置一个永久性的过程来检查设置的提醒时间是否是现在,如果是-执行提醒任务


编辑:尝试按照教程回答后出现一些错误。在步骤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_env)adrian@dev:~$Cellery-一名dj2工作人员-l信息
回溯(最近一次呼叫最后一次):
文件“/home/adrian/dj2_env/lib/python3.5/site packages/芹菜/app/utils.py”,第361行,在find_应用程序中
found=sym.app
AttributeError:模块“dj2”没有属性“app”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/adrian/dj2_env/bin/芹菜”,第11行,在
sys.exit(main())
文件“/home/adrian/dj2_env/lib/python3.5/site packages/cellery/_main__.py”,第14行,在main中
_main()
文件“/home/adrian/dj2_env/lib/python3.5/site packages/cellery/bin/cellery.py”,第326行,主文件
cmd.从命令行(argv)执行命令
文件“/home/adrian/dj2_env/lib/python3.5/site packages/celery/bin/celery.py”,第488行,从命令行执行
超级(CeleryCommand,self)。从命令行(argv)执行命令)
文件“/home/adrian/dj2_env/lib/python3.5/site packages/芹菜/bin/base.py”,第279行,从命令行执行
argv=self.setup\u app\u from\u命令行(argv)
文件“/home/adrian/dj2_env/lib/python3.5/site packages/芹菜/bin/base.py”,第481行,位于命令行的安装程序应用程序中
self.app=self.find_应用程序(app)
文件“/home/adrian/dj2_env/lib/python3.5/site packages/芹菜/bin/base.py”,第503行,在find_应用程序中
返回find\u app(app,symbol\u by\u name=self.symbol\u by\u name)
文件“/home/adrian/dj2_env/lib/python3.5/site packages/芹菜/app/utils.py”,第366行,在find_应用程序中
找到的=西芹
AttributeError:模块“dj2”没有属性“芹菜”

好的,解决了上面的错误-但是这很奇怪,因为当我从dj2(项目)目录运行worker命令时,它工作了8 |

您可以使用芹菜和rabbitmq来实现这一点。芹菜中有一种叫做周期性任务的东西,它可以让您在给定的特定时间运行任务,就像cron作业一样

下面是一个简单的教程

它让我们很好地理解芹菜是如何工作的。它还包括配置等


您可能需要做的是启动一个任务(每15分钟一次),该任务查询数据库并在接下来的24小时内检查会议,然后通知用户。本教程的第四部分介绍如何使用定期任务

芹菜周期性任务可能是最好的解决方案,但是更简单的替代方案可能是从crontab运行Django

管理命令将自动访问Django ORM,因此可以执行数据库检查并发送提醒。您可以从crontab运行它,例如:

# Run the command every 15 minutes
*/15 * * * * python /path/to/manage.py your_command_name

如果需要,使用管理命令还可以从命令行手动执行提醒过程

指定的教程不包含您需要的定期任务的信息。我只是在想,这是否是任务的某种“硬编码”?用户似乎不太灵活和/或可调,还是我错了?