Python 在Django中,处理只启动一个作业而不是多个作业的计划作业的最佳方法是什么?

Python 在Django中,处理只启动一个作业而不是多个作业的计划作业的最佳方法是什么?,python,django,multiple-instances,apscheduler,Python,Django,Multiple Instances,Apscheduler,[TLDR]在开发中,只有一个作业而不是两个,处理计划作业的最佳方法是什么?您是否使用“noreload”选项?您是否测试某个文件是否已锁定,然后停止该作业的第二个实例(如果已锁定)?有更好的选择吗 [上下文] [编辑]我们仍处于开发环境中,正在寻找生产环境的下一步 我和我的团队目前正在开发一个Django项目,Django 1.9和Python3.5。我们刚刚发现Django增加了两个自身实例以允许实时代码更改 APScheduler 3.1.0用于每隔几分钟安排一次DB ping,以查看是否

[TLDR]在开发中,只有一个作业而不是两个,处理计划作业的最佳方法是什么?您是否使用“noreload”选项?您是否测试某个文件是否已锁定,然后停止该作业的第二个实例(如果已锁定)?有更好的选择吗

[上下文] [编辑]我们仍处于开发环境中,正在寻找生产环境的下一步

我和我的团队目前正在开发一个Django项目,Django 1.9和Python3.5。我们刚刚发现Django增加了两个自身实例以允许实时代码更改

APScheduler 3.1.0用于每隔几分钟安排一次DB ping,以查看是否有新数据需要我们处理。然而,当Django启动时,我们注意到我们正在ping两次,并且有两个函数实例正在运行。我们试图通过APS关闭第二个作业,但由于它们处于两个不同的进程中,APS无法看到另一个作业

经过研究,我们发现了“noreload”选项和另一个测试文件是否已锁定的建议

noreload阻止Django旋转第二个实例。这个解决方案有效,但感觉很奇怪。我们没有遇到任何文档或指南表明这是您希望/不希望在生产中执行的操作

FileLock2.0.6是我们测试过的另一个选项。在该解决方案中,两个计划任务将ping本地文件以查看其是否已锁定。如果未锁定,则该任务将锁定并运行,而另一个任务将停止运行。如果任务崩溃,则锁定的文件将保持锁定状态,直到服务器重新启动。这感觉像一个黑客

在生产环境中,这些是好的解决方案吗?我们是否应该考虑其他更适合处理计划任务的替代方案?这两种解决方案都有我们没有想到的缺点吗


“noreload”-这是在生产环境中正常完成的吗?

这是否发生在
DEBUG=False
中?所有这些都非常令人困惑。当你说“django自转两个实例”时,上下文是什么?您正在运行管理命令吗?你在运行WSGI吗?你在经营芹菜工人吗?从您对--noreload的使用来看,我怀疑您正在尝试使用开发django服务器。这是一个开发服务器。它不适合在生产中使用。您似乎正在使用
python manage.py runserver
。在生产中,您应该使用真正的服务器,如Apache或nginx。如果不运行
runserver
@MadWombat,这个问题应该会消失。很抱歉造成混乱。根据对此的回应,建议使用noreload解决多个实例。我们仍在开发中,但现在开始考虑生产环境。Web服务器本质上是多线程的。如果您真的需要某个东西只运行一次,那么您应该将其实现为一个单独的组件,或者首先重新评估您对web服务器的使用情况。从django应用程序内部运行调度程序不是一个好主意。您可以通过黑客攻击dev服务器,使其只运行一个线程,但实际上需要在生产环境中运行多个线程。考虑为调度器编写一个独立的脚本。这是否发生在<代码>调试> = false <代码>?所有这些都非常混乱。当你说“django自转两个实例”时,上下文是什么?您正在运行管理命令吗?你在运行WSGI吗?你在经营芹菜工人吗?从您对--noreload的使用来看,我怀疑您正在尝试使用开发django服务器。这是一个开发服务器。它不适合在生产中使用。您似乎正在使用
python manage.py runserver
。在生产中,您应该使用真正的服务器,如Apache或nginx。如果不运行
runserver
@MadWombat,这个问题应该会消失。很抱歉造成混乱。根据对此的回应,建议使用noreload解决多个实例。我们仍在开发中,但现在开始考虑生产环境。Web服务器本质上是多线程的。如果您真的需要某个东西只运行一次,那么您应该将其实现为一个单独的组件,或者首先重新评估您对web服务器的使用情况。从django应用程序内部运行调度程序不是一个好主意。您可以通过黑客攻击dev服务器,使其只运行一个线程,但实际上需要在生产环境中运行多个线程。考虑为调度器编写一个独立的脚本。