![](/img/trans.png)
[英]how to make a non-blocking request with requests when running Flask with Gunicorn and Gevent
[英]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.