【问题标题】:Flask request hangs forever [duplicate]烧瓶请求永远挂起[重复]
【发布时间】:2015-08-21 19:11:08
【问题描述】:

我正在尝试了解为什么服务器不为第二个请求创建第二个线程:

from flask import render_template, redirect, url_for, jsonify
from . import pm
from .forms import NewForm
import requests, json

@pm.route('/pm/index')
def index():
    return render_template('pm/index.html')

@pm.route('/pm/new', methods=['GET', 'POST'])
def newitem():
    form = NewForm()
    if form.validate_on_submit():
        url = 'http://127.0.0.1:5000/api/search'
        payload = {'some': 'data'}
        r = requests.get(url)
        print(r.status_code)
        return redirect(url_for('material.index'))
    return render_template('pm/new.html', form=form)

我有一个外部 API,我想在用户向 @pm.newitem 发布信息后向其发布信息

为了促进开发,端点被存根以命中我本地服务器上的端点,但它只是永远挂起。如果端点在我手动测试时响应,为什么会出现这种情况?

http://127.0.0.1:5000/api/search 回复如下:

{
  "results": [
    {
      "id": 1,
      "name": "record"
    },
    {
      "id": 2,
      "name": "record2"
    }
  ]
}

注意,如果我运行两个服务器实例并将请求指向端口 3000,它就可以工作。

【问题讨论】:

  • 您如何为应用程序提供服务?很多时候基础设施不支持并发请求...

标签: python python-3.x flask request


【解决方案1】:

我想你已经回答了你自己的问题。服务器是单线程的:如果您在请求中向自身发出请求,它将挂起,因为它不可能完成原始请求。

运行两个实例可以解决这个问题,因为第二个 cab 会响应内部请求。

【讨论】:

  • 但是为什么服务器不为第二个请求创建第二个线程呢?
  • 为什么要这样?除非特别配置,否则开发服务器是单线程的。
  • 处理我的用例。 ;)
  • @JZ - 它肯定可以 - 你只需要指定你想要一个线程(或多进程)服务器,而不是普通的快速启动单线程开发服务器.查看链接的副本。
  • 显然不是任何合理意义上的重复问题。没有人搜索这个问题会找到所谓的重复问题。他们必须先知道JZ的问题的答案,然后才能知道自然跟进。相关但不同。
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2019-10-25
  • 2017-08-24
相关资源
最近更新 更多