Files
2026-10-07 13:06:47 +05:00

4.8 KiB
Raw Permalink Blame History

Технология параллельного программирования (Python)

Курс лабораторных работ для направления «Прикладная математика и информатика».

Цель курса

Научиться осознанно выбирать модель исполнения для конкретной задачи:

Модель Когда помогает Инструменты
Последовательный код базовая линия stdlib
Потоки (threads) задачи I/O-bound threading, concurrent.futures
Процессы (processes) задачи CPU-bound multiprocessing
Асинхронность много I/O-операций, кооперативность asyncio
Распределённые вычисления несколько машин / узлов mpi4py (MS-MPI)

Отдельное внимание: GIL — почему потоки в CPython не ускоряют чистый Python-код, и как это обходить.

Состав работ

№ Папка Тема
0 lab00_intro/ Окружение: Python, venv, VS Code, проверка готовности
1 lab01_sequential/ Последовательное вычисление, профилирование, CPU-bound vs I/O-bound
2 lab02_threads/ Многопоточность на I/O-bound задачах, ThreadPoolExecutor
3 lab03_gil/ GIL: почему потоки не ускоряют CPU-код; hashlib как исключение
4 lab04_multiprocessing/ Процессы, Pool, накладные расходы, spawn на Windows
5 lab05_sync/ Гонки данных, Lock, Semaphore, Event, producer–consumer
6 lab06_asyncio/ async/await, event loop, gather, семафор, сравнение с потоками
7 lab07_comparison/ Одна задача × 4 подхода, закон Амдала, итоговые графики
8 lab08_mpi/ Распределённые вычисления, MPI (по указанию преподавателя)

Варианты

Каждый студент выполняет свой вариант — см. common/варианты.md (20 вариантов: CPU-задача + параметры + I/O-нагрузка). Ядра всех задач уже реализованы в common/tasks.py — смысл лабораторных именно в организации вычислений и замерах, а не в переписывании алгоритмов.

Установка (Windows, 10/11)

  1. Python 3.10+ с python.org (галочка Add python.exe to PATH).
  2. Открыть папку курса в VS Code (расширение Python).
  3. В терминале VS Code:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python lab00_intro\check_env.py

Если вывод кириллицы «кракозябрами» — выполните chcp 65001.

На macOS/Linux всё то же самое, кроме activate (там source .venv/bin/activate).

Как сдавать

  • Код: labXX_.../solution.py (заполняются заготовки, интерфейсы менять нельзя — по ним работают автотесты).
  • Отчёт: по шаблону common/шаблон_отчёта.md — таблицы замеров, графики, выводы.
  • Самопроверка перед сдачей: python -m pytest tests/ -k labXX из корня курса.
  • Чек-лист: common/чек-лист_сдачи.md. Типичные ошибки: common/типичные_ошибки.md.

Структура репозитория

common/                 банк задач, варианты, утилиты замеров, шаблоны
lab00_intro/ ... lab08_mpi/
  методичка.md          теория + задание + контрольные вопросы + критерии
  examples/             запускаемые демонстрации
  solution.py           заготовка решения (заполняет студент)
tests/                  автотесты pytest (самопроверка студента, проверка преподавателя)
instructor_solutions/   эталонные решения (только для преподавателя)

Запуск примеров и решений

Все команды выполняются из корня курса:

python lab01_sequential\examples\01_perf_counter_demo.py
python lab01_sequential\solution.py
python -m pytest tests\ -v