应要求烧瓶挂起

Flask Hangs on request

最近我正在为 Windows 服务器开发一个 Flask website/api 应用程序,发现出现了一些奇怪的问题。

当有人向 url 发出请求时,偶尔(大约 10 次中有 3-4 次)它会挂起。要使该请求通过,我需要做的就是转到启动 Flask 服务器的命令行,并发送中断信号。 (我在 windows,所以基本上 "Ctrl + C")。我在谷歌上搜索了一段时间,但我相信 none 的解决方案适用。这是我尝试过的:

我在本地计算机(win7 64 位)上的设置几乎相同,一切正常。 (有问题的服务器是 Windows Server 2012)

我很想分享一些代码,但我非常怀疑这会是代码问题,因为它在本地运行得非常好。

有没有人遇到过同样的事情?

在与同事核实后(猜想我应该早点做..),似乎命令行工具本身就是问题...(不敢相信)。将其设置为 运行 作为 Windows 计划任务后,发出了数百个请求并且完全没有遇到任何问题。

这里说的一切都是真的 - 当你以正确的方式将它们组合在一起时;-)

  1. 如 OP 中所述,您的浏览器可能正在发出多个请求。即这通过 Chrome 发生在我身上,但不是通过 nc (netcat) 或 curl 或 wget 等更简单的方法发生的。
  2. 也如 OP 中所述 - 您需要多线程烧瓶。
  3. 但在 OP 中 - 当您添加“线程”选项时,如果您 运行 正在 flask CLI 工具。
  4. 所以在接受的答案中,它在您切换到“windows 计划任务”时有效 - 可能是因为您正在 直接 调用脚本,而不是通过flask cli 程序 AND 脚本具有 threaded=true - 当您调用脚本 [=25] 时 适用=]直接(没有flask CLI)。所以这是 a 正确答案 - 但出于不同的原因。
  5. 另一种方法是 正确地 使用 flask CLI 启用线程。这可以通过简单地将 --with-threads 添加到 flash 命令来完成。

总而言之 - 有两种正确的方法:

  • app.run() 和 运行 脚本中直接添加 threaded=true
  • --with-threads 添加到 flask CLI 程序并 运行 这样。