2017-07-15 169 views
0

之前我詢問過Make a non-blocking request with requests when running Flask with Gunicorn and Gevent,現在我對相關主題提出了更高級的問題。使用Gunicorn和Gevent運行Flask時請求異步Web請求

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

gunicorn有了這個代碼,對於發送到這個網絡服務的每一個要求,我需要等待4秒響應(它首先發送'慢api',然後'慢api b')。我如何修改示例以便請求發送到'slow api a'和'slow api b'可以同時發送,因此我可以在2秒內從4秒鐘內收到此Web服務的響應?

+0

Python版本? 3.5? 3.6? – Grimmy

+0

使用[grequests](https://github.com/kennethreitz/grequests)而不是請求 –

+0

python版本是2.7,將調查grequests。 – JLTChiu

回答

0

您應該使用多處理或線程。

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

[根@ NODE01選擇]#時間蟒蛇r.py

真正0m3.028s 用戶0m0.021s SYS 0m0.005s [根@ NODE01選擇]