使用Gunicorn和Geven运行Flask时,使用请求发出异步web请求

2024-09-25 08:34:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前问过Make a non-blocking request with requests when running Flask with Gunicorn and Gevent,现在我有一个关于相关主题的更高级的问题。在

我的Flask应用程序将接收一个请求,进行一些处理,然后向两个不同的慢速外部端点发出两个不同的请求,每个端点需要2秒钟的响应时间。我的烧瓶代码如下:

import requests

@app.route('/do', methods = ['POST'])
def do():
    resulta = requests.get('slow api a')  // takes 2 seconds to response
    resultb = requests.get('slow api b')  // takes 2 seconds to response
    return resulta.content + resultb.content

我用我的枪

^{pr2}$

有了这段代码,对于每个发送到这个web服务的请求,我需要等待4秒来响应(它先发送到“slow api a”,然后再发送“slow api b”)。我如何修改这个例子,使发送到“slow api a”和“slow api b”的请求可以同时发送,这样我就可以在2秒钟内从这个web服务获得响应,而不是4秒钟?在


Tags: to代码apiflaskgetresponsewith端点
1条回答
网友
1楼 · 发布于 2024-09-25 08:34:25

您应该使用多处理或线程。在

import multiprocessing
import time

def testa():
    time.sleep(3)
    return 'a'

def testb():
    time.sleep(3)
    return 'b'

if __name__ == '__main__':
    jobs = []
    for j in [testa, testb]:
        p = multiprocessing.Process(target=j)
        jobs.append(p)
        p.start()
    for k in jobs:
        k.join()

在[根@node01opt]#时间python r.py

实0m3.028s 用户0m0.021s 系统0m0.005s [根@node01选择]

相关问题 更多 >