繁体   English   中英

使用Gunicorn和Gevent运行Flask时,通过请求发出异步Web请求

[英]Make async web request with requests when running Flask with Gunicorn and Gevent

我之前曾问过在使用Gunicorn和Gevent运行Flask时使用请求发出非阻塞请求 ,现在我对相关主题有一个更高级的问题。

我的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

然后我用

gunicorn server:app -k gevent -w 4

使用此代码,对于发送到此Web服务的每个请求,我都需要等待4秒钟以做出响应(它首先发送到“慢速api a”,然后发送到“慢速api b”)。 如何修改示例,以便可以同时发送发送到“慢速api a”和“慢速api b”的请求,这样我可以在2秒而不是4秒的时间内从该Web服务获得响应?

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

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()

[root @ node01 opt]#时间python r.py

真实0m3.028s用户0m0.021s sys 0m0.005s [root @ node01 opt]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM