簡體   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