Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Gunicorn和Gevent运行Flask时,使用请求发出异步web请求_Python_Asynchronous_Flask_Gunicorn_Gevent - Fatal编程技术网

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

Python 使用Gunicorn和Gevent运行Flask时,使用请求发出异步web请求,python,asynchronous,flask,gunicorn,gevent,Python,Asynchronous,Flask,Gunicorn,Gevent,我以前问过,现在我有一个关于相关主题的更高级的问题 我的Flask应用程序将接收一个请求,进行一些处理,然后向两个不同的慢速外部端点发出两个不同的请求,每个端点都需要2秒钟的响应时间。我的代码如下所示: import requests @app.route('/do', methods = ['POST']) def do(): resulta = requests.get('slow api a') // takes 2 seconds to response result

我以前问过,现在我有一个关于相关主题的更高级的问题

我的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@node01opt]#time python r.py

实0m3.028s 用户0m0.021s 系统0m0.005s
[root@node01opt]

python版本?3.5? 3.6?使用代替请求Spython版本为2.7,将研究grequests。