@pydjango

Страница 497 из 1273
xPushkin
26.08.2017
21:38:13
Ты знаешь, что такое wsgi?
Да, wsgi application это callable объект который содержит request data и скрипт который нужно запустить для ответа

Denis
26.08.2017
21:40:17
Твой скрипт взаимодействует с uwsgi или подобным по протоколу wsgi. Параллельно может быть запущено несколько воркеров, если ты об этом. Но я все еще не понимаю, в чем проблема

xPushkin
26.08.2017
21:41:23
Мне казалось что скрипт, в который передается request, запускается, а потом все переменный в его скоупе вайпаются

Поэтому как можно возвращать переменную которая каждый раз будет очищаться. Для чего тогда изобрели redis или memcached?

Google
Denis
26.08.2017
21:42:35
Нет, он запускается один раз. Зачем на каждый запрос процесс спаунить?

xPushkin
26.08.2017
21:42:37
Почему тогда нельзя хранить все в переменных*

Denis
26.08.2017
21:42:53
Так в cgi делали когда-то давно

Почему тогда нельзя хранить все в переменных*
Потому что иногда нужно обмениваться данными с другими приложениями, например с фоновыми воркерами

xPushkin
26.08.2017
21:44:13
Потому что иногда нужно обмениваться данными с другими приложениями, например с фоновыми воркерами
Как ты передашь переменную, которую ты обновляешь раз в секунду, в 1000 реквестов?

Где она будет крутиться?

Denis
26.08.2017
21:44:36
Она глобальная

xPushkin
26.08.2017
21:44:44
Но после return скрипт возвращается и все что было внутри с ним же умирает

Denis
26.08.2017
21:45:30
Реквест с точки зрения твоего приложения — просто вызов вьюхи. Ничто не запрещает ей обращаться к глобальным переменным

manage.py runserver делал когда-нибудь? Он умирал после каждого запроса?

Google
xPushkin
26.08.2017
21:46:31
manage.py runserver делал когда-нибудь? Он умирал после каждого запроса?
Нет конечно. Он же постоянно слушает, как на лупе

Он не закрывается

Denis
26.08.2017
21:47:12
И твое приложение не закрывается

xPushkin
26.08.2017
21:48:19
И твое приложение не закрывается
Да, но моё приложение состоит из отдельных скриптов которые после выполнения своей работы умирают

Denis
26.08.2017
21:48:46
Это твои проблемы, в wsgi не так

xPushkin
26.08.2017
21:49:10
Но это нормальное поведение, мне нужно чтобы они отдали return и всё

Следующий реквест вызовет скрипт если нужно

Denis
26.08.2017
21:49:49
Для твоей задачи может и нормальное, для веб-сервиса нет

xPushkin
26.08.2017
21:49:56
Почему?

Denis
26.08.2017
21:50:18
Потому что нахрена спаунить процесс при каждом запросе?

xPushkin
26.08.2017
21:50:47
Зачем спаунить процесс..

Я же не Апач

Denis
26.08.2017
21:51:18
>моё приложение состоит из отдельных скриптов которые после выполнения своей работы умирают

Умирают != завершаются?

xPushkin
26.08.2017
21:51:55
Каждый реквест обрабатывается функцией, так?

Denis
26.08.2017
21:52:01
Да

xPushkin
26.08.2017
21:52:08
Функция возвращает return, так?

Denis
26.08.2017
21:52:13
Да

xPushkin
26.08.2017
21:52:19
FBV

О них сейчас.

Google
xPushkin
26.08.2017
21:52:27
Да по сути тоже самое

Denis
26.08.2017
21:52:29
Без разницы

xPushkin
26.08.2017
21:52:32
Угу

После завершения функции, все что было внутри скоупа чистится?

Sergey
26.08.2017
21:53:11
блин пока приложение работает переменная сохраняется вот если упадёт то да, переменная очистится и надо заново ее заполнять

Denis
26.08.2017
21:53:12
Что такое скоуп?

xPushkin
26.08.2017
21:53:24
Scope

Denis
26.08.2017
21:53:26
Локальные переменные, естественно, чистятся

Sergey
26.08.2017
21:53:34
После завершения функции, все что было внутри скоупа чистится?
глобальная переменная причём тут функция?

Denis
26.08.2017
21:53:35
Глобальные, естественно, нет

xPushkin
26.08.2017
21:54:18
А где крутить обновление глобальной переменой?

Denis
26.08.2017
21:54:45
В фоновом треде

Sergey
26.08.2017
21:54:59
А где крутить обновление глобальной переменой?
она глобальная пока приложение работает глобальная переменная существует

xPushkin
26.08.2017
21:55:41
Тогда почему бы не использовать глобальные переменные вместо бд в памяти?

Почему используют redis?

Sergey
26.08.2017
21:56:36
Тогда почему бы не использовать глобальные переменные вместо бд в памяти?
хотят сохранить результат после падения приложения например?

Denis
26.08.2017
21:56:41
Потому что если нужно взаимодействие с другими процессами, глобальные переменные не помогут

xPushkin
26.08.2017
21:57:18
хотят сохранить результат после падения приложения например?
Разве оно падает? Я думал просто выходит с ошибкой, а следующий реквест может быть нормально обработан

Google
Sergey
26.08.2017
21:57:53
xPushkin
26.08.2017
21:58:27
Тогда почему вы ему советуете использовать глобальные переменные, раз с ними может быть столько проблем

Всё-таки 1000 RPS это не шутка

Denis
26.08.2017
21:59:24
Потому что для кеша персистентность и отказоустойчивость не важна

Alex
26.08.2017
21:59:46
Какие проблемы могут быть? То что переменная очиститься при падании? Так это не страшно

Sergey
26.08.2017
22:00:09
ну вот если не страшно то юзай

xPushkin
26.08.2017
22:00:25
Хорошо. Спасибо большое, что объяснили мне

Sergey
26.08.2017
22:00:26
заново запрос сделать обновить переменную м дальше раздавать

Alex
26.08.2017
22:00:46
Я надеюсь что оно не будет падать, а даже если и упадёт так оно загрузит новое значение

xPushkin
26.08.2017
22:01:25
Я надеюсь что оно не будет падать, а даже если и упадёт так оно загрузит новое значение
Тебе ведь главное чтобы отдельный скрипт обновляющий переменную не упал, так?

Alex
26.08.2017
22:02:09
Это не отдельный скрипт. Это поток

Sergey
26.08.2017
22:03:29
а кстати как потоки запускать в каком то интервале? слипать что ли ?

xPushkin
26.08.2017
22:04:27
По-моему можно как-то делать schedule

Denis
26.08.2017
22:04:44
Запросили, поспали секунду

Вадим
27.08.2017
05:16:59
объясните, что такое докер и зачем он нужен?

Вадим
27.08.2017
05:20:51
это контейнер
и для чего он нужен?

Sergey
27.08.2017
05:21:43
ну чтобы изолироваться от глобального окружения ну и в следствии удобнее свой проект развернуть на другом компьютере

но слух прошёл что он говно ?

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

Google
Вадим
27.08.2017
05:29:26
Sergey
27.08.2017
05:29:53
ну вот и не парься

я чёт начал докер юзать потом забил

Вадим
27.08.2017
05:30:25
ок, сенкс

Galizhan
27.08.2017
05:41:56
Кто пользовался докером в продакшн? Есть какие-нибудь советы по настройке

Spacehug
27.08.2017
05:43:32
Какие-то есть :)

Galizhan
27.08.2017
06:53:59
Alex
27.08.2017
07:53:56
Добро пожаловать в race condition
Я в этом не шарю. Я задумывался что надо синхронизацию делать? По идее если только один поток работает на запись, а другой только на чтение, то проблемы не будет

serbernar
27.08.2017
07:56:59
Я в этом не шарю. Я задумывался что надо синхронизацию делать? По идее если только один поток работает на запись, а другой только на чтение, то проблемы не будет
Просто для чего тебе счётчик? Плюс где он будет храниться? И как ты будешь знать что у тебя не будет такого, что два реквеста возьмёт одно число и прибавит к нему, запишет, тогда счётчик будет не верным

serbernar
27.08.2017
07:57:51
Тем более

Alex
27.08.2017
07:58:47


В моем случае это не страшно. Ну обновит поток переменную. Значит я отправлю в ответ более свежие данные. Отлично

serbernar
27.08.2017
08:03:35
Не, я серьезно, это будет потом проблема в архитектуре

Такие темные места надо придумать заранее и будет круть

В го, например, есть дефер

Alex
27.08.2017
08:04:30
Единственное меня напрягает не может ли так случиться что в переменной окажется не полная строка, а только часть.

xPushkin
27.08.2017
08:04:30
Я предлагал Redis. Сказали, что слишком большой оверхед.

serbernar
27.08.2017
08:04:39
Когда можно удобно работать со счётчиками, как раз

xPushkin
27.08.2017
08:05:19
В го, например, есть дефер
Но так это последнее что выполняется перед завершением​ функции, а здесь нужно каждую секунду обновлять переменную, а не с каждым реквестом.

Страница 497 из 1273