2014-10-01 56 views
4

我正在任何方式來延長請求超時限制?

在[2] [CRITICAL] WORKER TIMEOUT =錯誤代碼= H12 DESC = 「請求超時」 方法= POST DYNO = web.1連接= 1毫秒服務= 30000ms

我開始在Heroku的燒瓶中的Web應用程序與

web: gunicorn server:app --timeout 60 --worker-class gevent --log-file=- 

--timeout標誌似乎並不不管我使用同步或GEVENT工人。任何想法如何擴展請求超時限制?

當然,我可能需要查看這種長進程的異步處理。

回答

5

作爲回答了an official Heroku discussion(鏈接現在是死的),我們不能設置超時時間上超過30秒:

Heroku的殺死時間比30秒長的所有請求。 沒有辦法改變這種行爲。


你需要重新設計你如何分割您的通話將多個較小塊發送請求。 JavaScript是要走的路。

0

這不是Heroku所特有的,但總體來說增加超時是一個糟糕的主意;這個想法應該儘可能快地返回響應 - 對於任何可能需要超過幾秒鐘的任何事情,您都應該接受請求,將其排序以供後臺處理並返回響應,以便您的客戶端不被阻止。

對於Heroku來說,這意味着您必須暫緩工作進程。這與您已經擁有的網絡動態代碼不同,它設計爲在後臺運行並且沒有這種超時限制。

對於這個常見的模式,有一個excellent writeup at the devcenter在這詳細介紹了整個過程。

專門針對Heroku上的Python,這是使用redis queue實現的。

+0

感謝您的詳細解答。我昨晚也挖掘出了rq和工作人員。只是想知道工作進程是否有增加使用的成本。目前還不清楚什麼成本影響可能是 – ttback 2014-10-01 16:45:27

+2

此外,這是一次性原型應用程序,所以我並不擔心延遲和用戶體驗問題,但應用程序不需要死在現場演示 – ttback 2014-10-01 17:10:09