
Anna
14.06.2017
00:20:08
Всем привет!
Каким пользуетесь фреймворком для тестирования?

Denis
14.06.2017
00:22:18
Стандартным, unittest

here1am
14.06.2017
00:22:25
robot framework
какой вопрос, такой и ответ

Google

Artem
14.06.2017
00:23:24
unittest с запуском через nose

Anna
14.06.2017
00:34:26

here1am
14.06.2017
00:38:57
А какой такой вопрос?
без пояснения, о каком тестирования речь. я про функциональное, господа выше - про юнит-тесты

Anna
14.06.2017
00:39:31

Boris
14.06.2017
03:41:32
В Джанго форме можно для поля указать опред набор объектов. Эту логику соответствия стоит ли прописывать в модели в save? Вы вообще так делали?

Igor
14.06.2017
04:13:25
добавь в env.py импорт своих моделей
Вся проблема была в импорте моделей. В файле где инициализируется база, модели импортировались в методе init, который я вызывал при инициализации приложения, поэтому метадата оказывалась пустой. Просто вынес импорт за метод и после создания engine и все заработало. Почему то нигде не прочитал этого, ну или так читал:) в общем спасибо всем кто откликнулся

Alex
14.06.2017
04:41:08
Есть вопрос по оптимальной настройке django+gunicorn+nginx. Сейчас три потока при 140 подключениях в секунду валит CPU в 100% и сервер падает. Как можно настроить на большую производительность?
CPU i5 - 4 ядра, 3 Ггц.

Старый
14.06.2017
04:45:23
во вторых - это разработка или мега прод такой?
а то не так двно мега заказчик хотел на паре i5 сделать себе сайт под интернет магазин

Alex
14.06.2017
04:48:01
Это локальное тестирование проекта, который скоро надо выкатывать на прод. Ожидаемая пиковая нагрузка до 500 уников единовременно.
Сейчас TOP покажу.

Google

Старый
14.06.2017
04:48:48
htop бы лучше, чем просто топ

Alex
14.06.2017
04:49:47
Это тестирование близкое к перезагрузке сервера.

Старый
14.06.2017
05:02:56
на работе гляну уже по нормальному, пока ток поеду на неё

Bsod
14.06.2017
05:03:43
100 rps и база в такой загруз ушла? покажите всё таки обычный топ. мож у вас там винты гумно и база пыжится читать все это?

Alex
14.06.2017
05:04:37
Я сперва думал, что Postgresql сильно грузит, сделал кеш на Redis, чтобы нагрузку уменьшить. Не сильно помогло.
Винты говно, тут увы обычный Sata

Старый
14.06.2017
05:05:04

Bsod
14.06.2017
05:05:12
да у вас что-то всё работает на все деньги

Старый
14.06.2017
05:05:19

Bsod
14.06.2017
05:05:41

Alex
14.06.2017
05:05:43

Старый
14.06.2017
05:05:47
prometheus+grafana пусть настроит
без этого тесты делать тупость

Bsod
14.06.2017
05:06:35
о. котаны. нынче все так же sqlalchemy рулит или появилось что лучше?

Alex
14.06.2017
05:22:18
Ушел настраивать prometheus+grafana

b0g3r
14.06.2017
05:29:43
у новичков в почете peewee - минималистичный и простой
вроде где-то там разрабатывается ponyorm, но в деле не видел

Bsod
14.06.2017
05:31:04
ну нафиг. если уж кто будет ковыряться после меня в коде - лучше оставить после себя алхимию

Google

b0g3r
14.06.2017
05:31:28
верно

I'm_your_god
14.06.2017
05:46:42
господа, а есть ли какой-то хитрый механизм для django, который умеет генерировать фикстуры? Чтоб он сам пробежался по списку моделей, которые он получил из installed_apps и сам создал рандомный набор данных? А то я читаю доки по всяким factory_boy, и там понимаю, мне придётся какие-то фактори писать... мне это всё не надо(
чтоб что-то вроде
python manage.py MAKE_FIXTURESи оно само всё сделало. Модели же есть, форенкеи там есть, и оно само это всё данными напихало
dumpdata делать нереально, база пару десятков гигов
я потом это сшивать заколебусь.

Anton
14.06.2017
06:44:15

Anders
14.06.2017
06:45:44
умудренные пользователи SQLAlchemy, объясните когда необходимо использовать session.rollback() с отрубленных autocommit=True.
try:
model_a.field_1 = valuse
self.session.commit()
except Exception: # IntegrityError
self.logger.exception(...)
self.session.rollback()

Alex
14.06.2017
06:46:11


Anders
14.06.2017
06:46:30
необходимо ли каждый commit оборачивать в try/except для отлова возможных ошибок со стороны транзакций БД/SQLAlchemy и явно дергать rollback?
дока как-то не дает однозначных ответов, либо я просто тупенький
When a flush() fails, typically for reasons like primary key, foreign key, or “not nullable” constraint violations, a rollback() is issued automatically (it’s currently not possible for a flush to continue after a partial failure). However, the flush process always uses its own transactional demarcator called a subtransaction, which is described more fully in the docstrings for Session. What it means here is that even though the database transaction has been rolled back, the end user must still issue rollback() to fully reset the state of the Session.
т.е. правильно ли я понимаю, что каждый чих либо на уровне непосредственного взаимодействия с данными, либо в каком-нибудь глобальном обработчике должен оборачивать апдейты данных в try/except и дергать rollback() в случае ошибок и алхимия по умолчанию ничего сама не разрезолвит помимо отката непосредственно транзакции на уровне СУБД?


Марк
14.06.2017
06:50:58

Bsod
14.06.2017
06:51:14
да отстаньте вы от меня о_О

Марк
14.06.2017
06:51:14
Бля, не тому)

Kirill
14.06.2017
07:10:11
Доброе утро коллеги, у нас тут вакансия появилась, кому интересно пишите мне в личку (желательно иметь резюме). https://hh.ru/vacancy/20724621

Alex
14.06.2017
07:31:22
Всем спасибо за помощь. Поднял доп.сервер для тестирования, поставил туда uWSGi, перенастроил PostgreSQL для более оптимальной работы и все стало отлично. Сервер держит нагрузку более 500 в секунду спокойно. На локальной машине затуп был явно в скорости диска.

Bsod
14.06.2017
07:35:30
кеееек


Kirill
14.06.2017
07:54:48
По совету b0g3r размещаю текст вакансии ( https://hh.ru/vacancy/20724621 ) целиком:
Ищем опытного, ответственного и самостоятельного Python-разработчика в действующий сервис знакомств.
Предстоит улучшать существующие и разрабатывать новые REST API для мобильных приложений, совершенствовать алгоритмы поисковой выдачи, предлагать и внедрять новые крутые решения. Будет хорошим плюсом опыт в создании административных веб-интерфейсов.
Что необходимо знать:
Python и Django + Django REST Framework
Понимание работы HTTP
PostgreSQL (оптимизация запросов, транзакции) RabbitMQ, Redis
Естественно Git
Что пригодится:
Умение администрировать UNIX (в частности Ubuntu)
Опыт использования Ansible для деплоя
Что будет просто отлично (но не обязательно):
Уверенное владение Javascript (плагины jQuery а еще лучше понимание чего-нибудь реактивного вроде Vue или Angular но это не обязательное требование)
Опыт работы с AWS
Что мы используем:
Amazon Web Services
Celery + RabbitMQ для очереди задач
Redis для кеширования
Nginx + uwsgi
Sentry для сбора ошибок
Условия:
Работа ТОЛЬКО фултайм в нашем офисе на Таганке (м. Таганская, Марксистская, Римская, Площадь Ильича)
Заработная плата от 100 000 рублей по результатам собеседования

Google

Aldar
14.06.2017
07:59:24
(dict[s] += 1) if s in dict else (dict[s] = 1)
что не так?
пишет invalid syntax

Admin
ERROR: S client not available

melancholiac
14.06.2017
08:00:17
что dict это кейворд

Igor
14.06.2017
08:00:52
dict[s] = 1 это не выражение

Сергей
14.06.2017
08:00:52
Это не кейворд

melancholiac
14.06.2017
08:01:21
dict[s] = s in dict and dict[s]+1 or 1

Сергей
14.06.2017
08:01:43

melancholiac
14.06.2017
08:01:45
и вообще если dict[s] то s in dict какбэ

Igor
14.06.2017
08:02:27
Сергей, не лучше ли сначала обьяснить, как работает if оператор, и что assignment в Пайтоне, в отличии от С++, например, не является выражением

Maxim robox
14.06.2017
08:02:41
setdefault не подойдёт?

Aragaer
14.06.2017
08:02:45
если в нем хранить просто инты, то лучше вааще counter

melancholiac
14.06.2017
08:04:08
вообще код странный с точки зрения логики

Aldar
14.06.2017
08:04:09

melancholiac
14.06.2017
08:04:18
я бы такой отказался интерпретировать
проверка на условие там излишня
(но это не точно)
просто dict[s] будет увеличиватся всегда
ну или пробрасывать исключение

Google

Aragaer
14.06.2017
08:07:43
from collections import Counter
и все

Anton
14.06.2017
08:07:58

Aldar
14.06.2017
08:09:22

Сергей
14.06.2017
08:14:22

Nikolay
14.06.2017
09:42:35
?

Marperia
14.06.2017
09:47:29
Гайз, один интереснейший вопрос:
Допустим, у нас есть предложение на английском (8 бит), русском (16) и китайском (32), написанное в UTF-8. Мы дописываем туда ещё символов, которые ничего не значат, чтобы описанное делилось на 256 (константа, может быть любой).
Далее мы берём ключ длиной 256 и складываем все символы со значением ключа так, чтобы на выходе у нас получился кусок английского текста (желательно) текста.
А затем — внимание! — мы посимвольно отнимаем ключ и получаем исходное сообщение.
Кто не понял, зачем этот изврат — смотрим сюда: https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_%D0%92%D0%B5%D1%80%D0%BD%D0%B0%D0%BC%D0%B0
Вопрос, уровень lite: где посмотреть про кодирование юникода и превращения двух символов в один?
Вопрос, уровень max: как прибавить к каждому символу, пусть даже на русском или китайском, значение символа на английском и получить символ на английском?


serbernar
14.06.2017
09:50:02
Гайз, один интереснейший вопрос:
Допустим, у нас есть предложение на английском (8 бит), русском (16) и китайском (32), написанное в UTF-8. Мы дописываем туда ещё символов, которые ничего не значат, чтобы описанное делилось на 256 (константа, может быть любой).
Далее мы берём ключ длиной 256 и складываем все символы со значением ключа так, чтобы на выходе у нас получился кусок английского текста (желательно) текста.
А затем — внимание! — мы посимвольно отнимаем ключ и получаем исходное сообщение.
Кто не понял, зачем этот изврат — смотрим сюда: https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_%D0%92%D0%B5%D1%80%D0%BD%D0%B0%D0%BC%D0%B0
Вопрос, уровень lite: где посмотреть про кодирование юникода и превращения двух символов в один?
Вопрос, уровень max: как прибавить к каждому символу, пусть даже на русском или китайском, значение символа на английском и получить символ на английском?
ord()?


Aragaer
14.06.2017
09:52:12
чтобы получить из произвольной бинарной каши символ на английском достаточно применить base64
вопрос в другом - зачем нужны именно символы на английском, почему нельзя просто оставить бинарную кашу?

Marperia
14.06.2017
09:53:42
Ну... Можно, но пересылать символы на английском, ИМХО, удобнее и короче в 8 раз.