大家好,
我正在开发一个 API,它发送多个请求、收集结果并将结果与一些处理相结合,并在某处返回响应。 我正在使用 greenlet worker,因为该进程显然是 IO 绑定的。
从我所读到的,每个处理 gunicorn 请求的 greenlet 就像一个线程,所以当 IO 阻塞调用必须等待 IO 时,greenlet 将阻塞该特定的 gunicorn 请求。 因此,例如在我的应用程序的处理程序中(顺便说一句,使用烧瓶),我有几个requests.get(...)
greenlet 将阻塞到下一个requests.get()
def fetch(pid):
response0 = requests.get('http://some-micro-service-0.com/')
response1 = requests.get('http://some-micro-service-1.com/')
response2 = requests.get('http://some-micro-service-2.com/')
return combine_response(response0, response1, response2)
我可以使用 grequests 尝试向处理程序添加更多并发性,以改善延迟(这是我正在寻找的东西)。 但是你对如何做到这一点有什么建议吗?
您对如何收集多个请求有什么建议吗?
我可以使用 grequests 尝试向处理程序添加更多并发性,
grequests.map()
是我上面提供的代码片段的速记版本。
除此之外, grequests
没有太大作用。 它的存在主要是为了在导入时修补进程,但 gunicorn 已经这样做了。
关闭票据,因为一段时间以来没有发生任何活动。
最有用的评论
grequests.map()
是我上面提供的代码片段的速记版本。除此之外,
grequests
没有太大作用。 它的存在主要是为了在导入时修补进程,但 gunicorn 已经这样做了。