我有一個在Flask中開發的Web應用程序。設置很簡單。該應用程序正在Gunicorn上運行。所有請求都通過nginx代理。 Flask應用程序本身向外部API發出HTTP請求。從flask應用程序到外部API的HTTP請求由來自前端JavaScript代碼的AJAX調用啓動。外部API以JSON格式將數據返回給Flask應用程序並返回到前端。使用Gunicorn異步工作器運行的應用程序看起來效率低於dev服務器
問題是,當我在開發模式下使用選項multithreaded = True
運行此應用程序時,我可以看到JSON數據異步返回到服務器,並且可以非常快速地在前端頁面上看到結果。
但是,當我嘗試使用nginx和gunicorn在生產模式下運行應用程序時,我發現JSON數據按順序返回 - 逐漸退出。看起來由於某種原因,對外部API的HTTP請求被阻止。
我在linux Ubuntu Server 16.04上使用supervisor。這是我開始通過主管gunicorn:
command = /path/to/project/env/bin/gunicorn -k gevent --worker-connections 1000 wsgi:app -b localhost:8500
看來,gunicorn不會異步處理請求,但它應該。
作爲實驗,我運行Flask應用程序,使用它在開發模式下內置於wsgi服務器(不gunicorn)中,使用debug=True
和multithreaded=True
。所有請求仍然通過nginx進行代理。 JSON數據返回更快,即異步(似乎呼叫沒有阻止)。
我讀gunicorn的文檔。它說如果我需要調用外部API,那麼我應該使用異步工作。我使用它們,但它不起作用。
所有的緩存內容都被考慮在內。我可能會認爲我沒有使用任何緩存。我在檢查服務器設置時清除了所有內容。
我錯過了什麼?我如何讓gunicorn按預期運行?
謝謝。