我正在使用女服务员在本地主机(Windows VM)上提供API,它是由在同一Windows VM上运行的C#应用​​程序调用的。女服务员挂起时,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();
}


如何避免超时?我应该在女服务员呼叫之间增加更多时间,更改女服务员线程数还是其他?

最佳答案

当请求数超过线程Source时,女服务员将给出该错误。


  警告:waitress.queue:任务队列深度为6


显示您有6个请求在1个线程上等待。我建议增加线程数。

您可以增加两次请求之间的等待时间,但是不能保证一次只能有一个请求。

关于c# - Python女服务员API挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55169231/

10-12 16:50