Перейти к основному содержимому

Домашнее задание 4: Многозадачность

📚 Лекция: Концепции многозадачности

Дедлайн

8 дней с момента занятия.

Задача 4.1: Fibonacci — потоки vs процессы

Взять функцию подсчёта чисел Фибоначчи и сравнить время исполнения кода (вызова функции от большого числа n, чтобы была видна разница в запусках на потоках и процессах, 10 раз, каждый на отдельном потоке/процессе) при использовании threading и multiprocessing. Запускаем одновременно 10 потоков/процессов, сравниваем общее время.

Необходимо сравнить время выполнения при:

  1. Синхронном запуске
  2. Использовании потоков (threading)
  3. Использовании процессов (multiprocessing)
Ограничение

Использовать concurrent.futures нельзя — задача про другое!

Артефакт: текстовый файл с результатами запуска различными методами.

Задача 4.2: Параллельное интегрирование

Переписать функцию integrate для того, чтобы её выполнение можно было распараллелить. Использовать concurrent.futures: ThreadPoolExecutor и ProcessPoolExecutor.

Сравнить время выполнения для integrate(math.cos, 0, math.pi / 2, n_jobs=n_jobs) при разном числе n_jobs (от 1 до cpu_num * 2) при использовании ThreadPoolExecutor и ProcessPoolExecutor.

integrate.py
import math

def integrate(f, a, b, *, n_jobs=1, n_iter=10000000):
acc = 0
step = (b - a) / n_iter
for i in range(n_iter):
acc += f(a + i * step) * step
return acc

Артефакт: файл сравнения времени исполнения в обоих случаях в зависимости от числа воркеров.

Задача 4.3: Межпроцессный обмен сообщениями

Реализовать следующую схему приложения:

У вас есть главный процесс и 2 дочерних (A и B). Из главного процесса вы можете через stdin отправлять сообщения (строки) в процесс A, которые будут складироваться в очередь. К каждому из сообщений процесс A будет применять .lower() и отправлять в процесс B (одно сообщение раз в 5 секунд). Процесс B должен отправлять закодированную строку через rot13, печатать в stdout и отправлять в отдельную очередь в главный процесс.

Вам понадобится как минимум multiprocessing.Queue, а возможно и multiprocessing.Pipe и потоки.

Артефакт: текстовый файл взаимодействия вас и программы (необходимо выводить время сообщений).