IIS后面的金字塔(女服务员)在使用APScheduler时随机停止工作

时间:2012-10-25 16:32:32

标签: python iis cron pyramid waitress

我在Windows上运行Pyramid应用程序,使用Waitress作为应用程序服务器,IIS作为Web服务器(代理)。当我运行应用程序时,它会在(看似)随机的时间内停止工作。它可以持续数天,甚至数周,然后停止,让IIS抛出502错误。当它停止时,除了重新启动Windows之外没有办法重新启动它。

这是一个小型应用程序,它使用APScheduler点击几个API来同步eBay / Amazon之间的库存。我不完全确定导致此问题的原因,因为日志中没有显示错误。我有一个旧版本的应用程序正在运行(没有APScheduler),我没有这个问题,所以我假设它与APScheduler有关。

还有其他人经历过这个吗?

1 个答案:

答案 0 :(得分:3)

首先让我说我自己还没有使用过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/
这也可能有用: How to create Celery Windows Service?
注意:我自己没有尝试过这些,因为我可以选择使用Linux。

也许有可能让APScheduler正常工作,但我认为使用Celery会更容易,因为如果工作者出现问题,你可以比在后台出现的问题更容易调试它线。 Celery还可以配置为在出现错误时自动向您发送电子邮件。