kb 03.10.2011 10:38 c8541125

а вы понимаете, как работает, к примеру, gunicorn?

для тех, кто не в курсе, я поясню. у вас есть сервер, который хочет:
1. иметь несколько воркеров, на один из которых и пойдёт обработка запроса, то есть работать не в один процесс, а в несколько (иначе будете испытывать преимущества только одного ядра).
2. с другой стороны, вы не хотите, чтоб воркеры простаивали на socket-запросах (типа запрос в БД или подобное), потому хотите, чтоб воркеры работали с сокетами через какой-нибудь eventlet (на время запроса засыпали и переключались на другой зелёный поток, если надо)

Но проблема в том, что предугадать задержки на сокетах у воркеров невозможно, и узнать их тоже некак. Потому, на сколько я понял, они действительно кормятся тупо все, но делается предположение, что, скажем, 10 запросов на один воркер ну уж точно ему хватит ("одновременно" обрабатывать, в зелёных потоках), а на остальное мы настроим, скажем, nginx, который будет держать их в очереди.

Почему nginx, а не, скажем, наш "главный" процесс? (который за воркерами следит) Вот тут у меня и возникает вопрос: как оно вообще распределяет запросы? Если я правильно понял — оно всем воркерам расшаривает одни и те же сокеты (через /tmp/somefile UNIX-сокет), и те все асинхронно из всех читают, но каким-то образом получается чтение только у одного из воркеров.

В общем, прошу объяснить мне вот этот трюк (если кто знает) с расшариванием сокетов. Спасибо.

Recommended by: @odin
1. werehuman 03.10.2011 12:42

Там сплошной Round Robin, я уверен на 99%.
И да, сабж говно, ставь gevent.

2. kbwerehuman /1 03.10.2011 13:27

почему говно? при чем тут gevent, если gunicorn умеет через gevent работать, а gevent не умеет, собственно, несколько процессов (что умеет gunicorn)?

3. werehumankb /2 03.10.2011 13:28 Psi+

умеет лол. man gevent.fork

4. kbwerehuman /3 03.10.2011 13:29 c8541125

уу, ок. а почему говно?

5. werehumankb /4 03.10.2011 13:30 Psi+

потому что тормоз. Были где-то тесты, поищи, даже твистеду всосал впроглот

6. kbwerehuman /3 03.10.2011 13:31 c8541125

я думал и твистед не умеет много процессов. но если ты так говоришь..

7. werehumankb /6 03.10.2011 13:31 Psi+

а вот твистед не умеет, увы

8. kbwerehuman /7 03.10.2011 13:32 c8541125

что-то не вижу документации о gevent.fork нифига. помоги, плиз? http://www.gevent.org/gevent.html

9. kbwerehuman /7 03.10.2011 13:32 c8541125

ну и, собственно, я еще померяю на PyPy скорость, мало ли, можт и gevent+cpython всосёт

10. werehumankb /9 03.10.2011 13:33 Psi+

> pypy
Ты всё ещё пытаешься это поделие использовать? Успокойся, он никогда не будет быстрее cpython.

11. kbwerehuman /10 03.10.2011 13:33 c8541125

у многих уже быстрее, почему бы и нет.

13. werehumankb /8 03.10.2011 13:34 Psi+

http://pastebin.com/bgkUbqKf рабочий кусок тестового псача

14. werehumankb /11 03.10.2011 13:35 Psi+

*у многих составителей тестов для pypy
fixed

15. kbwerehuman /14 03.10.2011 13:35 c8541125

та не, та же quora ж переведена почти вся на pypy, говорят лучше сделали им (ну понятно, если Gaynor пилил), ну и еще были истории успеха

16. werehumanwerehuman /13 03.10.2011 13:36 Psi+

только тут нету многопроцессорности, у меня где-то в дебрях ~/src есть такой

17. kbwerehuman /16 03.10.2011 13:36 c8541125

подожди. так этот gevent.fork — это зелёный процесс или настоящий?

18. werehumanwerehuman /16 03.10.2011 13:37 Psi+

там фишка простая. Создаёшь StreamServer, а потом форкаешь

19. werehumankb /17 03.10.2011 13:37 Psi+

самый настоящий fork()

20. kbwerehuman /19 03.10.2011 13:37 c8541125

тю блин. ок, ну допустим. и что дальше? типа двое попытаются на одном порту запустить StreamServer или где?

21. werehumankb /20 03.10.2011 13:38 Psi+

нет. Сначала создаёшь StreamServer, а потом делаешь форки. Все поступающие запросы по round robin будут передаваться на процессы

22. werehumanwerehuman /21 03.10.2011 13:38 Psi+

то есть несколько процессов будут слушать один порт

23. kbwerehuman /22 03.10.2011 13:39 c8541125

понятно. ключевое слово — round robin :-)

24. werehumankb /23 03.10.2011 13:39 Psi+

а не проверял, это я от балды сказал. Потому что самое простое решение

25. kbwerehuman /24 03.10.2011 13:41 c8541125

ок, я почитаю, что это такое. но что — вернусь за вопросами

Do you really want to delete ?