@ru_python

Страница 9228 из 9768
koder
03.06.2019
18:38:38
https://github.com/koder-ua/network_ping_test/blob/master/perf_report.md эта?
да вот патч от селиванова для протоклов - https://github.com/koder-ua/network_ping_test/commit/0abb5198226513541e48491db33b32a752225f82

Блин, напиши разрабам, они, походу, не в курсе
собственно скорость далеко не самая основная проблема всего этого. uvloop ее в меру лечит. Там куча проблем, поэтому и trio есть и curio, и из них тащат логику. Часть в 3.7 полечили, но еще осталось.

toby
03.06.2019
19:11:11
generator1[0] => generator2[0] => generator3[0] => generator1[1] => generator2[1] => generator3[1] как будет выглядеть такой скрипт?

сначала нулевой элемент генератора1, потом нулевой элемент генератора2 итд

Google
Alex
03.06.2019
19:11:33
если прямо хочешь всю последовательность лениво - напиши генератор с двумя вложенными циклами и yield

Alex
03.06.2019
19:13:51
zip же ленивый. В третьем. Во втором есть что-то в itertools
да но он возвращает сразу кортеж из N элементов

toby
03.06.2019
19:13:52
да, вот итертулс идеально подойдет

koder
03.06.2019
19:14:18
да но он возвращает сразу кортеж из N элементов
а как по-другому? возвращать итератор из 3х элементов?

а, я понял

ок

Alex
03.06.2019
19:15:45
в 2.x был itertools.izip

Евгений
03.06.2019
19:17:10
да вот патч от селиванова для протоклов - https://github.com/koder-ua/network_ping_test/commit/0abb5198226513541e48491db33b32a752225f82
У меня есть пара вопросом по тестам. Есть замер нагрузки CPU по uvloop и asyncio. А по потокам есть замеры нагрузки CPU?

toby
03.06.2019
19:17:23
a, b = (x for x in range(5)), (y for y in range(5)) for i in a: yield i for j in b: yield b что то типо такого?

Aragaer
03.06.2019
19:17:59
нет, там есть другое

Google
koder
03.06.2019
19:18:21
У меня есть пара вопросом по тестам. Есть замер нагрузки CPU по uvloop и asyncio. А по потокам есть замеры нагрузки CPU?
вроде там одинаково для всех тестов. в смысле все данные должны быть собраны для всех тестов одинаково

сча

Aragaer
03.06.2019
19:19:41
>>> list(itertools.chain.from_iterable(zip('abc', 'def', 'xyz'))) ['a', 'd', 'x', 'b', 'e', 'y', 'c', 'f', 'z']

koder
03.06.2019
19:20:24
У меня есть пара вопросом по тестам. Есть замер нагрузки CPU по uvloop и asyncio. А по потокам есть замеры нагрузки CPU?
https://github.com/koder-ua/network_ping_test/blob/master/perf_report.md#%D0%B4%D0%BE%D0%BB%D1%8F-%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B2-user-mode-%D0%B2%D0%BE-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F-%D1%82%D0%B5%D1%81%D1%82%D0%B0-%D0%BE%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%BE-%D0%B4%D0%BE-5-10 и там прямо в yaml с результатами сырые данные https://github.com/koder-ua/network_ping_test/blob/master/results/unified_test_results2.yaml

Aragaer
03.06.2019
19:20:33
простой чейн может сплющить список кортежей в просто список, а фром итерабл может достать их из зипа

koder
03.06.2019
19:21:10
@kzh3ka а чуть выше итоги трассирования perf совершаемых системных выховов

Alex
03.06.2019
19:32:25
да, вот итертулс идеально подойдет
держи def myzip(*args): iters = [iter(arg) for arg in args] num_active = len(iters) while True: for i, it in enumerate(iters): if it is None: continue try: yield next(it) except StopIteration: num_active -= 1 if not num_active: return iters[i] = None print(list(myzip('abc', 'defg', 'hij')))

это если нужен честный обход генераторов по очереди. если нет - вон выше пример от @aragaer однострочник

только учти что zip обходит последовательности пока хотя бы одна из них не закончится (т.е. работает по самой короткой последовательности)

toby
03.06.2019
19:38:54
А возможно ли сделать по самой длинной?

Alex
03.06.2019
19:38:59
itertoos.zip_longest обходит по самой длинной последовательности

подставляя значения fillvalue аргумента вместо тех что уже знакончились

toby
03.06.2019
19:40:47
Примерно такая вот проблема, поэтому хочу использовать лениво



test_obj - словарь со значениями, который мы получаем из циклов как все циклы завершились => objects['tests'].append(test_obj), добавляем в массив test_obj (куда стрелочка зеленая показывает)

Alex
03.06.2019
19:40:55
>>> list(itertools.chain.from_iterable(itertools.zip_longest('abc', 'defg', 'xyz', fillvalue='-'))) ['a', 'd', 'x', 'b', 'e', 'y', 'c', 'f', 'z', '-', 'g', '-']

Карлос
03.06.2019
19:41:54
кто напишет чекер соксов ? (географию)

toby
03.06.2019
19:47:24
Чтоб перейти к следующему циклу сразу

Google
toby
03.06.2019
19:47:32
Чисто псевдокод, идея такая прост

polunin.ai???
03.06.2019
19:47:47
Эм

toby
03.06.2019
19:47:49
Непонятно было как лениво это все организовать

Alex
03.06.2019
19:47:53
херь какая-то

polunin.ai???
03.06.2019
19:48:19
А зачем лениво?:

Alex
03.06.2019
19:48:25
toby
03.06.2019
19:50:10
Хороший вопрос, я думал это может помочь решить проблему таким образом

polunin.ai???
03.06.2019
19:51:21
А где проблема?

toby
03.06.2019
19:51:53
Вероятно, для моей проблемы будет достаточно найти самый длинный массив, range(len(arr)), 4 элемента добавлять в test_obj, потом obj['tests'].append(test_obj), если какой то элемент пустой - не добавлять его в test_obj

polunin.ai???
03.06.2019
19:52:44
Может таки скажете, в чем заключается проблема?

toby
03.06.2019
19:56:12
У нас есть 3 словаря с результатами тестов, 1 словарь - логи, 2 словарь - другие логи, 3 словарь - проверка тестов В каждом словаре есть ключи, в первом - name, во втором - status test, в третьем - excepted results и actual results Мы должны сделать 4 словарь, по ключу tests у нас есть массив с тестами

В массиве каждый элемент это 4 параметра, которые я написал в сообщение выше

polunin.ai???
03.06.2019
19:57:31
Словарь с логами например как организован? id_test: {status: str}?

Alex
03.06.2019
19:58:19
в смысле словаря?

может быть у тебя списки словарей?

toby
03.06.2019
19:58:44
{ "logs": [ { "time": "946684810", "test": "Test output A", "output": "fail" } ] }

{ "suites": [ { "name": "suite1", "tests": 1, "cases": [ { "name": "Test output B", "errors": 0, "time": "Saturday, 01-Jan-00 00:00:20 UTC" } ] } ] }

{ "captures": [ { "expected": "B" "actual": "B", "time": "2000-01-01T00:00:20+00:00" }, { "expected": "A" "actual": "B", "time": "2000-01-01T00:00:10+00:00" } ] }

вот три словаря

нужно объеденить их в четвертый fourth_dict = {'tests': [ ]}

Google
Alex
03.06.2019
19:59:43
zip(a[“logs”], b[“suits”], c[“captures”])

дальше собирай итоговый словарь и пиши в список или делай yield

toby
03.06.2019
20:00:56
почему хотел по одному собирать этот словарь, вдруг значение невалидное, тогда пишем пустую строку в параметр

Alex
03.06.2019
20:01:34
ну так и собирай, zip ленивый

toby
03.06.2019
20:02:05
for i in range(length_test_class_1): test_obj = {} test_obj['name_test'] = test_class_2.suites[i]['name'] test_obj['status_test'] = test_class_1.logs[i]['output'] test_obj['excepted'] = test_class_3.captures[i]['expected'] test_obj['actual'] = test_class_3.captures[i]['actual'] data.test_5['tests'].append({data.prefix + str(i): test_obj}) вот у меня пока такое получилось) но это ужос

а как мне с зипом считать i? у меня же там массив объектов

test_obj['name_test'] = test_class_2.suites[0]['name'] test_obj['name_test'] = test_class_2.suites[1]['name'] итд

Alex
03.06.2019
20:03:30
for log, suite, capture in zip(a[“logs”], b[“suites”], c[“captures”]): test_obj = {} test_obj[‘name_test’] = suite[‘name’] …

Aragaer
03.06.2019
20:03:37
нинада рейндж по длине

надо enumerate

Alex
03.06.2019
20:05:14
не надо enumerate, у него N списков.

toby
03.06.2019
20:05:42
TypeError: list indices must be integers or slices, not str

how to fix?

Alex
03.06.2019
20:06:14
wicker
03.06.2019
20:06:23
Ну ёпта, в гуголь переводчик

toby
03.06.2019
20:07:08
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'{k}_' if iskeyword(k) else k value = v self.__dict__[k] = value def __repr__(self): return self.logs

допустим как логи показываем

Aragaer
03.06.2019
20:07:16
for i, suite, log, capture in enumerate(zip(test_class_2.suites, test_class_1.logs, test_class_3.captures): data.test_5['tests'].append({data.prefix+str(i): {'name_test': suite['name'], 'status_test': log['output'], 'excepted': capture['expected'], 'actual': capture['actual']}})

toby
03.06.2019
20:07:17
через точку

создаем объект

Google
toby
03.06.2019
20:07:49
a.logs => показывает по ключу logs

Alex
03.06.2019
20:08:18
так ладно, я спать. у нас тут уже классы пошли на кой-то хрен. но трейсбеки мы читать не умеем.

toby
03.06.2019
20:10:00
ок, спасибо за помощ

polunin.ai???
03.06.2019
20:11:01
нужно объеденить их в четвертый fourth_dict = {'tests': [ ]}
Просто циклом от i до n пройтись по 3 спискам и сделать tests.append({logs, expected, actual, name})?

koder
03.06.2019
20:17:58
for i, (suite, log, capture) in ....

Страница 9228 из 9768