我刚刚想到的东西:
假设我正在为我的 Django 站点编写视图代码,我犯了一个错误并创建了一个无限循环。
每当有人试图访问视图时,分配给请求的工作人员(无论是 Gevent 工作人员还是 Python 线程)都会无限期地停留在循环中。
如果我理解正确,服务器会在 30 秒后向客户端发送超时错误。但是 Python 工作者会发生什么?它会无限期地继续工作吗?听起来很危险!
想象一下,我有一台服务器,其中分配了 10 个工作人员。我让它运行,在某个时候,客户端尝试使用无限循环访问视图。一个工人将被分配给它,并且在下一次服务器重新启动之前将有效地死亡。危险的是,一开始我不会注意到它,因为站点会慢得不知不觉,有 9 个工人而不是 10 个。但它可能会在很长一段时间内一次又一次地发生,可能是几个月。该站点会逐渐变慢,直到最终只有一名工人时它会变得非常慢。
服务器重启可以解决问题,但我不想让我的网站的功能依赖于服务器重启。
这是一个真正的问题吗?有没有办法避免它?
更新:我也非常感谢一种方法来获取陷入无限循环的线程/工作者的堆栈跟踪,所以我可以通过电子邮件将其通过电子邮件发送给我,这样我就会意识到这个问题。(我不知道该怎么做,因为没有引发异常。)
更新人们所说的“避免编写具有无限循环的代码”的内容:如果不是很明显,我不会在空闲时间故意将无限循环放入我的代码中。当这些事情发生时,它们就是错误,错误可以被最小化,但永远不能完全避免。我想知道,即使我犯了错误,也会有一个安全网通知我并让我解决问题。