приложение работает медленно в многопоточном режиме uwsgi

мы используем uwsgi + nginx для создания веб-сайта. недавно мы хотели улучшить qps нашего сайта, поэтому решили переключить режим uwsgi с prefork на threaded. но мы нашли что-то очень плохое.

при использовании режима prefork с настройкой воркеров 5 получаем время запроса 10-20мс. но в многопоточном режиме (один рабочий 5 потоков) значение увеличивается до 100-200 мс. это очень плохо.

мы обнаруживаем, что memcache.Client занимает больше всего времени, что увеличивает время запроса.

пожалуйста, помогите мне узнать, где проблема и как ее решить, спасибо!

PS: код: import memcache client = memcache.Client(['127.0.0.1:11211']) client.get('mykey')


person 企业应用架构模式大师    schedule 31.07.2012    source источник
comment
Не используйте нити. Это проблема GIL Попробуйте мой вариант stackoverflow.com/a/14755343/1865653   -  person nnmware    schedule 07.02.2013


Ответы (1)


Вы, вероятно, испытываете накладные расходы Python GIL. Попробуйте добавить второй процесс, чтобы увидеть, будут ли результаты лучше.

person roberto    schedule 31.07.2012
comment
меняю на два рабочих 10 потока, проблема осталась - person 企业应用架构模式大师; 31.07.2012
comment
в режиме предварительного разветвления 41-кратный запрос memcache занимает 21 мс, а в режиме предварительного разветвления + многопоточный — 110 мс. код такой же. - person 企业应用架构模式大师; 31.07.2012
comment
какой модуль memcached вы используете? Попробуйте использовать pylibmc, поскольку его управление GIL намного лучше, чем python-memcached. - person roberto; 01.08.2012