2013-03-17 32 views
10

我有一個Django應用程序在Nginx後面的Gunicorn中運行。一切工作正常,編寫一個奇怪的事情:我有一個「下載」視圖和一個RESTful json API。當調用下載視圖時,我使用urllib2來訪問json API來獲取信息。而當我試圖做這個http請求到json api時,請求會超時並出現錯誤HTTP Error 504:Gateway Time-out。Gunicorn worker timeout

當我用./manage.py runserver運行代碼時,一切正常。對json api的http get請求也只需要幾個毫秒,所以沒有發生超時的危險。

的myproject/views.py:(可爲:http://myproject.com/download

1 def download(request, *args, **kwargs): 
2  import urllib2 
3  opener = urllib2.build_opener() 
4  opener.open('http://myproject.com/api/get_project_stats') 

opener.open()呼叫四號線運行到超時在Gunicorn運行時

在這裏,在僞代碼的情況,當與./manage.py runserver運行everytihng工作正常(和api電話只需要幾毫秒。

有沒有人有同樣的問題?重要的是:你是如何解決它的?

+0

您是否嘗試過用[Gunicorn超時設置]玩(HTTP:// docs.gunicorn.org/en/latest/configure.html#timeout) – 2013-03-17 18:02:40

回答

13

我不得不用我每次做Gunicorn,NGINX,Django和Requests

同一個問題:(

response = requests.get('http://my.url.com/here') 

工人會超時

我從Syncronous開關解決了這個問題同步)工作人員到異步(eventlet)工作人員。

,如果你正在啓動命令行添加:

-k 'eventlet' 

,如果您使用的是配置文件中加入:

worker_class = "eventlet" 
+0

感謝您的回答!就是這個! (但是我沒有用異步的eventlet工具解決這個問題,我在使用芹菜的異步任務中執行HTTP請求解決了這個問題。) – Anton 2013-06-10 13:56:42

+0

當我遇到類似問題時,這對我有效。 – 2013-07-30 20:16:31

+1

你必須安裝eventlet。我使用'pip install eventlet',然後在命令行中添加'--worker-class eventlet'。 – Gesias 2013-10-30 15:28:09