【问题标题】:Pyramid (waitress) behind IIS randomly stops working when using APScheduler使用 APScheduler 时,IIS 后面的 Pyramid(女服务员)随机停止工作
【发布时间】:2012-10-25 16:32:32
【问题描述】:

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

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

有其他人经历过吗?

【问题讨论】:

    标签: python iis cron pyramid waitress


    【解决方案1】:

    首先让我说我自己还没有使用过 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 还可以配置为在出现错误时自动向您发送电子邮件。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多