2013-12-17 46 views
0

我有一個web服務,它根據地理要素創建圖像並使用django框架將其返回給地圖。這是一個平鋪地圖服務(TMS)eventlet - 基於django的web服務上的綠色線程

Web sercive通過url調用,例如:http://host.com/TMS/map_id/x/y/z.png其中map_id,x,y和z是用於生成圖像的變量。

該url調用一個python函數,它返回地圖客戶端(OpenLayers)中的圖像。當在地圖移動用戶調用一串請求關於此web服務等http://host.com/tiling/1/0/1/1.pnghttp://host.com/tiling/1/1/0/1.png

我想用eventlet到線程本web服務的功能,以便通過產生在並行的圖像,而不是一個一次。

有人可以通過提供有關如何偵聽特定URL(TMS URL)以及如何在函數上啓動線程的提示來幫助我做到這一點。非常感謝。 Eventlet郵件列表上同一線程的

+0

您是如何部署Web服務的?通常,瀏覽器一次請求多個切片。如果你有多個工作者,瓷磚應該已經並行創建。 – sk1p

+0

這個web服務仍然在本地的django開發服務器上運行,但我正在爲WebFaction的未來部署工作。我讀過,我必須將我的服務器更改爲eventlet.wsgi,以使其並行工作。有沒有辦法來驗證瓷磚是否實際上並行創建? –

+1

任何嚴重的部署方法都允許並行請求,從gunicorn,mod_wsgi,uwsgi到fastcgi。由於Django 1.4,即使是開發服務器也是線程化的。我不知道WebFaction,但如果您有shell訪問權限,可以通過運行'top'或'htop'來驗證這一點,並在服務器發出測試請求時檢查可用核心的利用率。 – sk1p

回答

1

複製:

最簡單的方法是改變你的後端服務器gunicorn或產卵或eventlet.wsgi。

所有這些(可能還有其他一些)能夠在單獨的綠色線程中爲每個連接或請求提供服務。

請注意,如果請求處理是CPU綁定,綠色線程將無濟於事。

如何在eventlet.wsgi服務器下運行Django?

Django並不特別,它是自1.4開始的常規WSGI應用程序。 https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/

現在需要做什麼以綠色線程我的web服務的功能?我正在運行Windows的進程監視工具,我發現實際上該函數正在單線程上運行。

你完成了。每個請求都在一個單獨的綠色線程中提供。根據定義1,綠色線程在進程外不可見。 (這意味着進程監視器工具也看不到綠色線程)