Python официантка API зависает - PullRequest
1 голос
/ 14 марта 2019

Я использую официантку для обслуживания API на локальном хосте (Windows VM), он вызывается приложением C #, работающим на той же Windows VM. C # сообщает об ошибках тайм-аута, когда официантка зависает: System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse()

Я могу отправить официантку обратно в ответ, перейдя в командную строку, которая запустила официантку, и нажав CTRL + C. Когда я это делаю, я получаю несколько сообщений от официантки: WARNING:waitress.queue:Task queue depth is 6, но он продолжает работать.

Официантка была настроена так:

from flask import Flask, request
from waitress import serve
app = Flask(__name__)
@app.route('/apiname', methods=['POST'])
def apiname():
    content = request.json
    foo = function(content)
    return foo
if __name__ == '__main__':
    serve(app, listen='*:5000', threads=1)

и я бегу официанткой с > python appname.py

Заглушка кода C #, если она имеет значение:

string API_URL = "api_url";//insert a real URL here
var httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(API_URL);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Timeout = 100000; // milliseconds

using (var streamWriter = new System.IO.StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = Newtonsoft.Json.JsonConvert.SerializeObject(info, new Newtonsoft.Json.JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore });
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}
var httpResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
{
    string result = streamReader.ReadToEnd();
}

Как мне избежать тайм-аутов? Должен ли я добавить больше времени между вызовами официанток, изменить количество потоков официанток или что-то еще?

1 Ответ

1 голос
/ 24 мая 2019

Официантка выдает эту ошибку, когда запросов больше, чем потоков Источник .

ПРЕДУПРЕЖДЕНИЕ: waitress.queue: глубина очереди задач 6

показывает, что в 1 потоке ожидают 6 запросов.Я бы предложил увеличить количество потоков.

Вы можете увеличить время ожидания между запросами, но нет гарантии, что одновременно будет только один запрос.

...