Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2010 03:28:32

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

Как понимать ответ сервера на запрос - что это?
1. Отдельный процесс.
2. Отдельный поток.
3. Вообще ни-то ни другое, а всё работает только на внутренних событиях.

Я хочу понять одну вещь:
здесь пишут http://habrahabr.ru/blogs/python/84629/ что

>>> nums = xrange(100000000)
>>> -1 in nums # 1 тик (6,6 с)
И обещают что это залочит другие потоки этого приложения на 6.6 сек. - верю :)
Я проверил следующее, в двух консолях (одной машины естественно) запустил питон, в одном “питоне” я набросал программу:
import os
def small_ticks():
while True:
t = time.time()
time.sleep(0.1)
print time.time()-t
а в другом запустил тот “гигантский тик” и я не заметил что бы это как-то значительно (у меня на 2-3 секунде появляется задержка до 0.4) повлияло на скорость исполнения small_ticks()

А теперь внимание вопрос: что будет с пользователями которые обращаются на сервер запущенный через WSGI, в тот момент когда один из них исполняет “гигантский тик”, они будут out of service (как в первом случае) , или ощутят притормаживание (как во втором)?



Офлайн

#2 Июль 22, 2010 08:48:26

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Response, как понимать?

>И обещают что это залочит другие потоки этого приложения
по теории должно быть так
>Я проверил следующее, в двух консолях (одной машины естественно)
“одного приложения” != “одной машины”

при работе если wsgi приложение занято, то сервер создает ещё одно рядом, т.е. их будет несколько и они будут параллельно работать.

Отредактировано (Июль 22, 2010 08:48:51)

Офлайн

#3 Июль 22, 2010 08:57:43

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Response, как понимать?

для интереса набросал пример, у меня на пару секунд блочится процесс.

# coding:utf8

import thread
import time

def myThread(param):
for x in xrange(10):
print x
time.sleep(0.2)

thread.start_new_thread(myThread, ('this param',))
time.sleep(0.5)
print 'start'
if -1 in xrange(100000000): pass
print 'finish'
time.sleep(2)

Офлайн

#4 Июль 22, 2010 10:31:16

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

o7412369815963
для интереса набросал пример, у меня на пару секунд блочится процесс.
Наверное неплохой комп у тебя :D

o7412369815963
при работе если wsgi приложение занято, то сервер создает ещё одно рядом, т.е. их будет несколько и они будут параллельно работать.
А приложение - это что? и сервер - это тоже что? Сорри, я просто с трудом догоняю таки штуки. Почему я спрашиваю? Если родитель сервера - питон, не будет ли в примере как выше, ведь внутри питона все “потоки” условные.



Офлайн

#5 Июль 22, 2010 14:16:49

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

alexx11
Как понимать ответ сервера на запрос - что это?
Ответ какого сервера? apache? а они тоже бывают разные. Читайте про проектирование веб серверов - http://groups.google.ru/group/fido7.ru.unix.prog/browse_thread/thread/e8f8edf4f2f2447b/?pli=1
Но чаще всего у apache2 это именно отдельный ПРОЦЕСС.

alexx11
А теперь внимание вопрос: что будет с пользователями которые обращаются на сервер запущенный через WSGI, в тот момент когда один из них исполняет “гигантский тик”, они будут out of service (как в первом случае) , или ощутят притормаживание (как во втором)?
Вот тут стоит уточнить о каком “сервере”(на который обращаются) идет речь. Это будет apache, nginx, некий сервер приложений написанный на питоне или еще что?
Если речь идет про апач, который в многопроцессном варианте, то скорее всего будет так во 2-м варианте. Но может быть и 3-й - остальные пользователи никак не заметят этого. Зависит от того как именно настроен apache(ну и конечно что за операция делается).



Отредактировано (Июль 22, 2010 14:19:49)

Офлайн

#6 Июль 22, 2010 14:37:33

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

alexx11
А приложение - это что? и сервер - это тоже что? Сорри, я просто с трудом догоняю таки штуки. Почему я спрашиваю? Если родитель сервера - питон, не будет ли в примере как выше, ведь внутри питона все “потоки” условные.
Здесь как раз наоборот - родитель питона - apache :) Т е веб сервер порождает много процессов с питоном… как-то так вроде.



Отредактировано (Июль 22, 2010 14:38:46)

Офлайн

#7 Июль 22, 2010 22:10:25

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

Alex2ndr
Здесь как раз наоборот - родитель питона - apache
Хмм… Дело в том что ни apache ни других веб-серверов у меня нет ;) apache - это вообще отдельный user обычно, но разве вопрос об этом?

Более того когда я запускаю под юзером приложение через WSGI я в ps axu могу наблюдать только обычный питон, что опять же подтверждает мои опасения того что один тик, будет всё лочить.



Офлайн

#8 Июль 23, 2010 06:18:05

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Response, как понимать?

Если ты запускаешь bottle.run() - это для дебага и разработки, в данном случае только один процесс - один приконектился, второй ждет.
для деплоймента нужно разворачивать нормальный сервак. хотя если кол-во клиентов будет не большим то можно и так оставить, у меня на работе 2 сервиса работает от bottle.run(), все довольны.

а на счет “залочит”, нужно делать так что-б контент моментально отдавался. у меня была версия блога которая генерировала страницы за 2мс, т.е. один поток мог обработать до 500 клиентов в секунду.

Офлайн

#9 Июль 23, 2010 09:00:49

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

alexx11
Более того когда я запускаю под юзером приложение через WSGI я в ps axu могу наблюдать только обычный питон, что опять же подтверждает мои опасения того что один тик, будет всё лочить.
Если у вас самописный сервер на питоне то да - длительные атомарные операции будут все лочить. Как вариант можно делать многопроцессную версию, используя processing. Но там своих граблей навалом… Именно поэтому выгодно использовать apache - он распределяем запросы по процессам за нас.

o7412369815963
а на счет “залочит”, нужно делать так что-б контент моментально отдавался. у меня была версия блога которая генерировала страницы за 2мс, т.е. один поток мог обработать до 500 клиентов в секунду.
Вы же понимаете, что это идеальный вариант. Основная потеря времени происходит в сетевом общении - пересылка через медленные каналы, потеря пакетов, шейпер и тд. По локальной сети может и вариант, но уже в WAN такого не будет. Именно поэтому часто и нужна связка nginx+apache(т е фронтенд-бэкенд).



Офлайн

#10 Июль 23, 2010 09:53:11

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Response, как понимать?

o7412369815963
нужно делать так что-б контент моментально отдавался.
Ага, это типа дзена, я стараюсь :)

Alex2ndr
Именно поэтому выгодно использовать apache - он распределяем запросы по процессам за нас.
А как программы не питоне запускать через mod_python или mod_wsgi?



Отредактировано (Июль 23, 2010 10:21:41)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version