Promise<>
Чтоб перейти к следующему циклу сразу
Promise<>
Чисто псевдокод, идея такая прост
Dmytro
Эм
Promise<>
Непонятно было как лениво это все организовать
Alex
херь какая-то
Dmytro
А зачем лениво?:
Promise<>
Хороший вопрос, я думал это может помочь решить проблему таким образом
Dmytro
А где проблема?
Promise<>
Вероятно, для моей проблемы будет достаточно найти самый длинный массив, range(len(arr)), 4 элемента добавлять в test_obj, потом obj[&#39;tests&#39;].append(test_obj), если какой то элемент пустой - не добавлять его в test_obj
Dmytro
Может таки скажете, в чем заключается проблема?
Promise<>
У нас есть 3 словаря с результатами тестов, 1 словарь - логи, 2 словарь - другие логи, 3 словарь - проверка тестов В каждом словаре есть ключи, в первом - name, во втором - status test, в третьем - excepted results и actual results Мы должны сделать 4 словарь, по ключу tests у нас есть массив с тестами
Promise<>
В массиве каждый элемент это 4 параметра, которые я написал в сообщение выше
Dmytro
Словарь с логами например как организован? id_test: {status: str}?
Alex
в смысле словаря?
Alex
может быть у тебя списки словарей?
Promise<>
{ &quot;logs&quot;: [ { &quot;time&quot;: &quot;946684810&quot;, &quot;test&quot;: &quot;Test output A&quot;, &quot;output&quot;: &quot;fail&quot; } ] }
Promise<>
{ &quot;suites&quot;: [ { &quot;name&quot;: &quot;suite1&quot;, &quot;tests&quot;: 1, &quot;cases&quot;: [ { &quot;name&quot;: &quot;Test output B&quot;, &quot;errors&quot;: 0, &quot;time&quot;: &quot;Saturday, 01-Jan-00 00:00:20 UTC&quot; } ] } ] }
Promise<>
{ &quot;captures&quot;: [ { &quot;expected&quot;: &quot;B&quot; &quot;actual&quot;: &quot;B&quot;, &quot;time&quot;: &quot;2000-01-01T00:00:20+00:00&quot; }, { &quot;expected&quot;: &quot;A&quot; &quot;actual&quot;: &quot;B&quot;, &quot;time&quot;: &quot;2000-01-01T00:00:10+00:00&quot; } ] }
Promise<>
вот три словаря
Promise<>
нужно объеденить их в четвертый fourth_dict = {&#39;tests&#39;: [ ]}
Alex
zip(a[“logs”], b[“suits”], c[“captures”])
Alex
дальше собирай итоговый словарь и пиши в список или делай yield
Promise<>
почему хотел по одному собирать этот словарь, вдруг значение невалидное, тогда пишем пустую строку в параметр
Alex
ну так и собирай, zip ленивый
Promise<>
for i in range(length_test_class_1): test_obj = {} test_obj[&#39;name_test&#39;] = test_class_2.suites[i][&#39;name&#39;] test_obj[&#39;status_test&#39;] = test_class_1.logs[i][&#39;output&#39;] test_obj[&#39;excepted&#39;] = test_class_3.captures[i][&#39;expected&#39;] test_obj[&#39;actual&#39;] = test_class_3.captures[i][&#39;actual&#39;] data.test_5[&#39;tests&#39;].append({data.prefix + str(i): test_obj}) вот у меня пока такое получилось) но это ужос
Promise<>
а как мне с зипом считать i? у меня же там массив объектов
Promise<>
test_obj[&#39;name_test&#39;] = test_class_2.suites[0][&#39;name&#39;] test_obj[&#39;name_test&#39;] = test_class_2.suites[1][&#39;name&#39;] итд
Alex
for log, suite, capture in zip(a[“logs”], b[“suites”], c[“captures”]): test_obj = {} test_obj[‘name_test’] = suite[‘name’] …
Aragaer
нинада рейндж по длине
Aragaer
надо enumerate
Alex
не надо enumerate, у него N списков.
Promise<>
TypeError: list indices must be integers or slices, not str
Promise<>
how to fix?
wicker
Ну ёпта, в гуголь переводчик
Promise<>
class Attributes1: def __init__(self, json_dict: dict): for k, v in json_dict.items(): if isinstance(v, dict): value = Attributes1(v) else: k = f&#39;{k}_&#39; if iskeyword(k) else k value = v self.__dict__[k] = value def __repr__(self): return self.logs
Promise<>
допустим как логи показываем
Aragaer
for i, suite, log, capture in enumerate(zip(test_class_2.suites, test_class_1.logs, test_class_3.captures): data.test_5[&#39;tests&#39;].append({data.prefix+str(i): {&#39;name_test&#39;: suite[&#39;name&#39;], &#39;status_test&#39;: log[&#39;output&#39;], &#39;excepted&#39;: capture[&#39;expected&#39;], &#39;actual&#39;: capture[&#39;actual&#39;]}})
Promise<>
через точку
Promise<>
создаем объект
Promise<>
a.logs =&gt; показывает по ключу logs
Alex
так ладно, я спать. у нас тут уже классы пошли на кой-то хрен. но трейсбеки мы читать не умеем.
Promise<>
ок, спасибо за помощ
Dmytro
нужно объеденить их в четвертый fourth_dict = {&#39;tests&#39;: [ ]}
Просто циклом от i до n пройтись по 3 спискам и сделать tests.append({logs, expected, actual, name})?
koder
for i, (suite, log, capture) in ....
koder
@toooobeedo ^
Promise<>
воу
Promise<>
а это круто) спасибо
Anonymous
Привет чат всем
Pavel
Привет чат всем
правила. ты их читал?
B
Есть питон, есть вим, не работают вместе, шо делать, какие подводные?
Tishka17
в смысле не работают и в смысле вместе?
B
Интеграция питона в вим через джедай
koder
Интеграция питона в вим через джедай
я вообше хз, но в любом случае лучше подробнее описать проблему. Что именно не работает, что пробовал, что смотрел
B
я вообше хз, но в любом случае лучше подробнее описать проблему. Что именно не работает, что пробовал, что смотрел
Есть питон 3.7.3 64х, есть вим 8.1.чтотодальше 64х, хотел внедрить нормальную проверку и дополнение кода, почитал что хорош jedi-vim, выполнил его установку и вим начал обильно ругаться на невозможность инициализации питона, +python штуки в виме есть, Команда echo has(python) даёт 0,
Unat
@Kdanylov прошу прощения за, возможно, тупой вопрос, но в тесте asyncio количество загруженных ядер для асинка и тредов было равным? Я перед сном в чат заглянул, меня что-то клинит на том, что асинк в один поток работает.
koder
@Kdanylov прошу прощения за, возможно, тупой вопрос, но в тесте asyncio количество загруженных ядер для асинка и тредов было равным? Я перед сном в чат заглянул, меня что-то клинит на том, что асинк в один поток работает.
да, все тесты запускались с привязкой к одному ядру. Генератор нагрузки пинился на другие ядра процессора. В питоне потоки тоже в один поток работают фактически. Пока один исполняет питон-байтокод - остальные стоят. Но потенциально могут исполнять узкие прослойки С-кода. Но тут нет, тест пинится на одно ядро процессора. Если не пинить на одно ядро - потоки начинают сильно проседать изза паразитных переключений. Это, в частности, проблема многих &quot;тестов&quot; потоки vs async в инете - народ тупо не знает что нужно пинить на одно ядро многопоточные программы на питоне
Unat
О как. А простого синхронного теста не было?
Unat
Без потоков и асинка
koder
@nepherpitou собвственно это совершенно ожидаемый результат. asyncio выполняет просто безумное количество питон кода на каждый await сначала ты уходишь вних по славно задизайненному со всеми требуемыми паттернами стеку вызовов в недра asyncio что бы она сконтруировала тебе Future потом это future ты везешь обратно по всему своему стеку вызовов до самого loop. loop регистрирует на него калбек и проделывает вагон метаработы и всякой фигни. Однажды future исполнится, ему поставят done, вызовется callback и корутину подвинут в очередь готовых. Потом обратно через весь стек вниз прокинут результат. Выходит 400+ питоновских инструкций на каждый await. Каждая примерно по ~50 тактов CPU. или 20к+ тактов. А переключение потоков в ядре со всем скедуленгом и туда-сюда &lt; 500 тактов. Так и живем
koder
О как. А простого синхронного теста не было?
нет, да и нет смысла, будет совсем смешно. Но можно запустить потоковый тест на одном воркере
koder
Тест будет полностью лимитироваться латентностью tcp стеков и сетки
Unat
Тест будет полностью лимитироваться латентностью tcp стеков и сетки
А с медлительным сервером не оценивал результаты? Когда время исполнения питонячей богодельни будет сильно меньше времени ответа сервера.
Unat
Блин, надо будет завтра поковыряться.
Anonymous
как удалить все папки в которых нету файла ПАРОЛИ ?
Unat
Хм... Для такого теста надо логику менять, в текущем виде асинк будет ждать каждого нового ответа, а потоки будут делать это в N раз чаще.
koder
@nepherpitou если сервер будет тупить, или если на клиенткой стороне будет еще какая-то активность между приемом и посылкой сообщения, то просто возрастет латентность. Сообщения же не паплайнятся. Но в таком случае ты будешь мерять не совсем то. но вообще по мере роста количества соединений потокам становится все хуже и хуже, так что если сервер будет тупить и открытые соединения будут копится - потоки начнут проигрывать постепенно изза повышенного потребления ресурсов при простое. Собвественно на том ноуте где я это тестит больше 20к потоков не удавалось запустить. На текущем работает с 30k, но дальше уже не.
koder
Вот это сейчас неожиданно реально. Каждый поток на свое ядро пинил или все на одно?
все на одно. иначе они бОльшую часть времени тупо за GIL воюют
Unat
нет, у тебя же асинков тоже много как и потоков. все параллельно
В десятый раз пошел с телефона а код тупить...
Tishka17
Они и так воюют за гил
Tishka17
В общем непонятно
Tishka17
Код теста бы
koder
Они и так воюют за гил
код теста в той же репе. main.py
koder
так они не воюют