2012-07-31 128 views
1

我們使用uwsgi + nginx構建網站。最近,我們想要改進我們網站的qps,所以我們決定將uwsgi模式從prefork切換到線程。但我們發現一些非常糟糕的事應用程序在uwsgi線程模式下運行緩慢

當使用prefork模式與工人設置5時,我們得到的請求時間是10-20ms。但在線程模式下(一個工人5個線程),該值增加到100-200ms。這太糟糕了。

我們發現memcache.Client佔用了大部分時間,使請求時間增加。

請幫我知道問題出在哪裏以及如何解決,謝謝!

PS: 代碼: 進口的memcache 客戶端= memcache.Client([ '127.0.0.1:11211']) client.get( '的myKey')

+0

請勿使用線程。這是GIL問題 試試我的變種 http://stackoverflow.com/a/14755343/1865653 – nnmware 2013-02-07 15:58:45

回答

0

您可能遇到蟒蛇GIL開銷。嘗試添加第二個過程以查看結果是否更好。

+0

我改變兩個工人10個線程,問題仍然存在 – 2012-07-31 06:26:04

+0

preforking模式下,41倍的memcache查詢時間21ms ,但在preforking +線程模式下,需要110ms。代碼是一樣的。 – 2012-07-31 06:32:54

+0

您正在使用哪個memcached模塊?嘗試使用pylibmc,因爲它對GIL的管理比python-memcached好很多 – roberto 2012-08-01 05:47:15

相關問題