Я использую официантку для обслуживания API на локальном хосте (виртуальная машина Windows), она вызывается приложением С#, работающим на той же виртуальной машине Windows. С# сообщает об ошибках тайм-аута, когда официантка зависает:
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();
}
Как избежать таймаутов? Должен ли я увеличить время между вызовами официантки, изменить количество потоков официантки или что-то еще?





Официантка выдает эту ошибку, когда запросов больше, чем потоков Источник.
WARNING:waitress.queue:Task queue depth is 6
показывает, что у вас есть 6 запросов, ожидающих в 1 потоке. Я бы посоветовал увеличить количество потоков.
Вы можете увеличить время ожидания между запросами, но нет гарантии, что в каждый момент времени будет только один запрос.