Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added module10/hw5/linear.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
68 changes: 68 additions & 0 deletions module10/hw5/module_10_5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Домашнее задание по теме "Многопроцессное программирование"
"""
Задача "Многопроцессное считывание":

Необходимо считать информацию из нескольких файлов одновременно, используя многопроцессный подход.

Подготовка:

Скачайте архив с файлами для считывания данных и распакуйте его в проект для дальнейшего использования.

Выполнение:

Создайте функцию read_info(name), где name - название файла. Функция должна:
1. Создавать локальный список all_data.
2. Открывать файл name для чтения.
3. Считывать информацию построчно (readline), пока считанная строка не окажется пустой.
4. Во время считывания добавлять каждую строку в список all_data.

Этих операций достаточно, чтобы рассмотреть преимущество многопроцессного выполнения программы над линейным.
1. Создайте список названий файлов в соответствии с названиями файлов архива.
2. Вызовите функцию read_info для каждого файла по очереди (линейно)
и измерьте время выполнения и выведите его в консоль.
3. Вызовите функцию read_info для каждого файла,
используя многопроцессный подход: контекстный менеджер with и объект Pool.
Для вызова функции используйте метод map, передав в него функцию read_info и список названий файлов.
Измерьте время выполнения и выведите его в консоль.

Для избежания некорректного вывода запускайте линейный вызов и многопроцессный по отдельности,
предварительно закомментировав другой.
"""
import time
from multiprocessing import Pool


def read_info(name):
all_data = []
with open(name, 'r') as file:
while True:
line = file.readline()
if not line:
break
all_data.append(line)
return print("============================\n"
f"\tfile {name} read\n"
"============================")


# пример использования
# p.s. файлы слишком большие для гит репозитория
if __name__ == "__main__":
# список файлов для чтения
file_names = [f"file {number}.txt" for number in range(1, 5)]

# линейный вызов
start_time = time.time()
for file_name in file_names:
read_info(file_name)
linear_duration = time.time() - start_time
print(f"Время выполнения линейного вызова: {linear_duration:.6f} секунд")

# закомментить блок выше для многопроцессного выполнения и раскомментить блок ниже

# многопроцессный вызов функции
# start_time = time.time()
# with Pool() as pool:
# pool.map(read_info, file_names)
# parallel_duration = time.time() - start_time
# print(f"Время выполнения многопроцессного вызова: {parallel_duration:.6f} секунд")
Binary file added module10/hw5/parallel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.