
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
Где она будет крутиться?

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
Он не закрывается

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

Denis
26.08.2017
21:57:51

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
объясните, что такое докер и зачем он нужен?

Sergey
27.08.2017
05:20:08

Вадим
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

serbernar
27.08.2017
07:00:02

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

serbernar
27.08.2017
07:56:59

xPushkin
27.08.2017
07:57:42

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
В го, например, есть дефер
Но так это последнее что выполняется перед завершением функции, а здесь нужно каждую секунду обновлять переменную, а не с каждым реквестом.