Tishka17
Можно же и асинк развернуть через gunicorn для балансировки
Ну вот все запросы которые на одном сервере и будут виснуть
Tishka17
подскажите пожалуйста что не так. делаю десериализацию через marshmallow есть схема class DivisionSchema(Schema): id = fields.Int() name = fields.Str() nameShort = fields.Str() abbreviation = fields.Str() sport = fields.Nested(SportSchema) hasWildcard = fields.Bool() class Meta: unknown = EXCLUDE @post_load def make(self, data, **kwargs): data['division_id'] = data.pop('id') data['sport'] = data['sport']['sport_id'] return data class DivisionsSchema(Schema): divisions = fields.Nested(DivisionSchema, many=True) class Meta: unknown = EXCLUDE и вторая схема class TeamSchema(Schema): id = fields.Int() name = fields.Str() venue = fields.Nested(VenueSchema) abbreviation = fields.Str() teamName = fields.Str() locationName = fields.Str() firstYearOfPlay = fields.Int() division = fields.Nested(DivisionSchema) sport = fields.Nested(SportSchema) shortName = fields.Str() allStarStatus = fields.Str() active = fields.Bool() class Meta: unknown = EXCLUDE class TeamsSchema(Schema): teams = fields.Nested(TeamSchema, many=True) когда вызывается вторая схема, то вызывается исключение schema\divisions.py", line 19, in make data['sport'] = data['sport']['sport_id'] KeyError: 'sport' как это можно исправить? в @post_load подгоняю сразу данные для БД
SportSchema это что?
Alexandr
SportSchema это что?
class SportSchema(Schema): id = fields.Int() code = fields.Str() name = fields.Str() abbreviation = fields.Str() class Meta: unknown = EXCLUDE @post_load def make(self, data, **kwargs): data["sport_id"] = data.pop("id") return data class SportsSchema(Schema): sports = fields.Nested(SportSchema, many=True)
Tishka17
подскажите пожалуйста что не так. делаю десериализацию через marshmallow есть схема class DivisionSchema(Schema): id = fields.Int() name = fields.Str() nameShort = fields.Str() abbreviation = fields.Str() sport = fields.Nested(SportSchema) hasWildcard = fields.Bool() class Meta: unknown = EXCLUDE @post_load def make(self, data, **kwargs): data['division_id'] = data.pop('id') data['sport'] = data['sport']['sport_id'] return data class DivisionsSchema(Schema): divisions = fields.Nested(DivisionSchema, many=True) class Meta: unknown = EXCLUDE и вторая схема class TeamSchema(Schema): id = fields.Int() name = fields.Str() venue = fields.Nested(VenueSchema) abbreviation = fields.Str() teamName = fields.Str() locationName = fields.Str() firstYearOfPlay = fields.Int() division = fields.Nested(DivisionSchema) sport = fields.Nested(SportSchema) shortName = fields.Str() allStarStatus = fields.Str() active = fields.Bool() class Meta: unknown = EXCLUDE class TeamsSchema(Schema): teams = fields.Nested(TeamSchema, many=True) когда вызывается вторая схема, то вызывается исключение schema\divisions.py", line 19, in make data['sport'] = data['sport']['sport_id'] KeyError: 'sport' как это можно исправить? в @post_load подгоняю сразу данные для БД
Так. А какие данные прилетают вообще, смотрел?
Pavel
что в твоем понимании «перехватить», и зачем?
David
burp должен видеть, но если с ним не получается, то можешь попробовать OWASP ZAP
David
Это как бурп
Проксимов
С этим не в эту группу
Pavel
в самом крайнем случае можно и ваершарком посмотреть
Pavel
а вот как - это действительно не про питон
Pavel
тогда, боюсь, для решения этой задачи тебе не хватит знаний
Bogdan (SirEdvin)
Tishka17
Internally aioodbc employs threads to avoid blocking the event loop
Tishka17
Окей
Tishka17
Так я и без коннектора могу
Bogdan (SirEdvin)
Ну и поддерживаю комментаторов выше, Если нет, значит не уперся ваш oracle в основном никому на python
Tishka17
Да в общем, большинству и asyncio нафиг не нужен
Pavel
асинк что, секта? как сап?
Tishka17
Похоже
Tishka17
Нет, подход прикольный. Но эффект, имхо, не заслуживает возьни
Bogdan (SirEdvin)
Ну, я как человек, который еще не успел привыкнуть к тредпулам могу сказать, что тредпулы для меня выглядят более странным вариантом
Pavel
ну а кодерки с многолетним стажем смотрят на асинкхайп с легким недоумением
Tishka17
Ну вообще если речь про веб, мне в 90% случаев хватает обычного uwsgi/gunicorn безо всяких тредпулов. Если не про веб тут есть варианты
🍁 Jaŭhien
можешь заюзать tmux
В эпоху докеров, кубернетесов, CI/CD и serverless мы запускаем несколько тасков в tmux. Ладно хоть не на шареде :)
Bogdan (SirEdvin)
Хорошо. А как ты гарантируешь, что у тебя луп никогда не заблокируется?
А как вы гарантируете, что у вас в коде не возникнет вечного while: True? Никак, словите в тестах/на продакшене. Я пока ловил один раз такое в синхронном коде, и 0 в асинхронном. Я конечно, не показатель, но мне кажется, что проблема блокировки основного треда не настолько серьезная.
Bogdan (SirEdvin)
ну а кодерки с многолетним стажем смотрят на асинкхайп с легким недоумением
Кодерки с многолетним стажем должны знать, что такое асинк уже очень давно, еще с С
Tishka17
треду пулы и фьючеры - тоже асинхронность. Мы конкретно про asyncio
Tishka17
У вас по треду на клиента?
а что, uwsgi/gunicorn работают не так?
Pavel
давайте еще стеклесс с его тасклетами вспомним
Tishka17
я не про gevent, если что. А про самую обычную конфигурацию
Bogdan (SirEdvin)
а что, uwsgi/gunicorn работают не так?
Эм .... нет. Там же некоторые количество воркеров и между ними балансируются запросы
Alexander
Вакансия Munchen, Germany Python Developer (m/f/d) Responsibilities - Create features that add value for our customers - Design, implement and test reliable APIs - Work with and integrate various cloud services - Harden interfaces against possible failures - Stay up to date with the Python/Cloud community - Learn about and experiment with new tech coming from inside and outside the Python / Cloud ecosystem Requirements - 2+ years or more experience building Software - Fluent in English - The desire to learn and apply new technologies - Solid knowledge about git - Willingness to work in an agile team with quickly evolving requirements and frequent releases - Passion for elegant and well-structured code - Enjoy working and experimenting with new technologies Вилка: 50-70тевро/год #работа #офис
Bogdan (SirEdvin)
Если там 500 клиентов и 4 воркера, то одновременно обрабатывается 4 запроса, остальные в очереди сидят
Alexander
тэги же, ну
а какие, ну? ))
Tishka17
а какие, ну? ))
правила я вслух читать должен?
Bogdan (SirEdvin)
И если вы попали на while: True, то технически это аффектит всех клиентов, потому что воркеров на их запросы теперь только 3
Alexander
и по-русски плиз
зачем по-русски, если требуется флюэнт? ))) и не в россии
Bogdan (SirEdvin)
Ну вы же не запускаете async приложение прямо само по себе
Tishka17
и да, gunicorn по дефолту убивает воркер если тот не ответил за определенное время. Что ещё снижает цену ошибки
Alexander
Что такое (m/f/d)?
м/ж и не определился
🍁 Jaŭhien
Вон оно че, европа...
Pavel
м/ж и не определился
а что, это имеет значение для кодерков? те, кто "само решит", кодят лучше девочек, которые лучше мальчиков?
Alexander
а что, это имеет значение для кодерков? те, кто "само решит", кодят лучше девочек, которые лучше мальчиков?
это подчеркивает лояльность компании к таким индивидумам. а вообще, так положено ))
🍁 Jaŭhien
Знаменитой, €вропейской
Bogdan (SirEdvin)
в смысле?
Ну, вы так же запускате условный саник в n воркеров, даже потому, что есть синхронные куски кода типо парсинга и всего прочего
Pavel
это подчеркивает лояльность компании к таким индивидумам. а вообще, так положено ))
херня какая то. он/а/о кодить должен/на/но, а не выпячивать свою самоидентификацию, не?
Tishka17
Ну, вы так же запускате условный саник в n воркеров, даже потому, что есть синхронные куски кода типо парсинга и всего прочего
ну хорошо. Там где на синхронном коде убивает 1 запрос из 4 и тормозит всех. Тут убьет 25% запросов
Pavel
этот вопрос не ко мне, а в европарламент
да и хрен с ним. это так, мысли вслух скорее
Bogdan (SirEdvin)
ну хорошо. Там где на синхронном коде убивает 1 запрос из 4 и тормозит всех. Тут убьет 25% запросов
Здорово. Подскажите, все-таки, насколько реально высока вероятность того, что такая ошибка дойдет до прода и реально сработает? В сравнении с обычными багами?
Tishka17
ну у меня в проде прога с сегфолтом падала =)
Bogdan (SirEdvin)
Особенно что бы это реально был while;True. а не просто синхронный сетевой запрос, который тоже просто деграднет перформанс
Tishka17
тоже свлит всех кто сидит на воркере
Tishka17
ну и вообще речь шла не о whule True, а о других синхронных запросах с непредсказуемым временем овтета
Bogdan (SirEdvin)
деграднет перфоманс вполть до 0, ага
Ну, зависит от запроса. Запрос в бд увеличит задержку ответа, например, милисекунд на 5-20 всем клиентам этого воркера.
Bogdan (SirEdvin)
То есть оно будет тупить, но все еще работать
Tishka17
синхронный запрос в БД увеличит задержку ответа всем на время выполнения этого запроса. Например до бесконечности
Bogdan (SirEdvin)
Почему до бесконечности то?
Tishka17
потому что кое-кто не подумал и не поставил сетевые таймауты, а умные админы режут все tcp соединения которые не юзаются несколько минут
Tishka17
это я про себя
Tishka17
и пингов не было в пуле
Tishka17
в итоге все ждали на ngixnx, воркер рестартовал по таймауту и люди продолжали работать.
Tishka17
я такую ошибку больше не повторю, но сколько их ещё бывает