список вида:
[{'file_size': int, 'time': float}, {'file_size': int, 'time': float}...]
После чего я считаю скорость и из отсортированного списка скоростей беру медиану.
И теперь мне хочется результаты сохранить в жсон вида:
{
hash_function_1: [{'speed': float, 'block_size': int}, {'speed': float, 'block_size': int}...],
hash_function_2: [{'speed': float, 'block_size': int}, {'speed': float, 'block_size': int}...],
}
То, что у меня сделано сейчас, почему-то пихает все результаты под один ключ hash_function, хотя их точно два, они передаются как параметр. Сам код в пасте: https://pastebin.com/M1i7KMEJ
Вы приложили код функции. В 1-й строке принимаете параметр hash_function. Нужно смотреть код снаружи, который hash_function в функцию кладёт.
Да, действительно, ошибка оказывается в вызове. Для дебага оставил меньшую часть, суть в том, что здесь во внешнем цикле не меняется значение hash_function: for hash_function in ['SHA-256', 'SHA-512']: while block_size <= 512: total_upload_time = [] total_download_time = [] print(source_compose['services']['app']['environment']) for index, env_var in enumerate(source_compose['services']['app']['environment']): if 'BLOCK_SIZE' in env_var.split('='): source_compose['services']['app']['environment'][index] = f'BLOCK_SIZE={block_size}' if 'HASH_TYPE' in env_var.split('='): source_compose['services']['app']['environment'][index] = f'HASH_TYPE={hash_function}' with open('docker-compose.yml', 'w') as src_f: target_compose = ruamel.yaml.YAML() target_compose.dump(source_compose, src_f) block_size *= 2 continue
Следующая проверка точно выполняется? Это единственное место, на которое сейчас влияет hash_function. if 'HASH_TYPE' in env_var.split('=')
Да. Я попробовал вывести значение hash_function в начале и в конце внутреннего цикла, и во внутреннем цикле hash_function всегда SHA-256
Ерунда какая-то, что-то не сходится. Попробуйте жёстче отследить происходящее. Начните с самого простого, убедитесь что значения меняются: for hash_function in ['SHA-256', 'SHA-512']: print(hash_function) И потихоньку наращивайте скрипт, следите когда сломается. Похоже, какая-то логика ускользает от нас.
Я и говорю. Значения во внутреннем цикле не меняются.
Даже в моём примере из 2-х строк выше?
Вот в этом примере: block_size = 256 for hash_function in ['SHA-256', 'SHA-512']: print(f'{hash_function=}') while block_size <= 512: print(f'{hash_function} - {block_size}') total_upload_time = [] total_download_time = [] for index, env_var in enumerate(source_compose['services']['app']['environment']): if 'BLOCK_SIZE' in env_var.split('='): source_compose['services']['app']['environment'][index] = f'BLOCK_SIZE={block_size}' if 'HASH_TYPE' in env_var.split('='): source_compose['services']['app']['environment'][index] = f'HASH_TYPE={hash_function}' #print(source_compose) with open('docker-compose.yml', 'w') as src_f: target_compose = ruamel.yaml.YAML() target_compose.dump(source_compose, src_f) block_size *= 2 print(hash_function) continue Я имею следующий вывод: hash_function='SHA-256' SHA-256 - 256 SHA-256 SHA-256 - 512 SHA-256 hash_function='SHA-512'
А block_size почему не перезаряжаете?
Блок сайз засуньте внутрь фора
Точно. Да, спасибо.
Обсуждают сегодня