首先让我说我自己还没有使用过 APScheduler,并且对在 Windows 和 IIS 上运行 Python 服务器(或其他任何东西)几乎一无所知。
所以我只能在这里猜测,但很明显你的问题在某种程度上与 APScheduler 有关。我可以想象 APScheduler 用于您的后台任务的线程出现问题,并且由于 GIL(Python 中的全局解释器锁),挂起的线程会导致您的整个应用程序崩溃。例如,当您的线程遇到某种竞争条件时,可能会发生这种情况。也许在前一次迭代完成处理之前开始处理。或者你得到一个非常大的积压,这会在处理开始时导致问题。
无论如何,我认为任务队列更适合 Web 应用程序的后台处理,因为它们是独立运行的,并且脱离了 Web 服务器的上下文。您可以在某个用户操作触发后立即安排任务,一旦有工作人员可用,它就会被处理,并且不会推迟到某个时间点。
我建议尝试一下Celery,但也有其他可用的解决方案,其中许多基于 Redis。
Celery 非常强大,并且具有周期性任务和 crontab 样式计划等高级功能 - 所以您现在可以使用它来执行您正在使用 APScheduler 执行的操作。
这看起来对在 Windows 下设置 Celery 很有帮助:http: //mrtn.me/blog/2012/07/04/django-on-windows-run-celery-as-a-windows-service/
这也可能有帮助:
如何创建 Celery Windows 服务?
注意:我自己没有尝试过任何这些,因为如果我有选择的话,我会使用 Linux。
也可能让 APScheduler 正常工作,但我认为使用 Celery 会容易得多,因为如果工作人员出现问题,您将能够比后台线程中出现的问题更容易地调试它。Celery 还可以配置为在出现错误时自动向您发送电子邮件。