JustCaptain kod-buduschego
1b7ae631e8e0aa08482b2abc32064a70d25c5de5
Перейти к файлу
Код
kod-buduschego Python 2025-20264.5. Многопоточностьpracticeschatgpt_2TASKS.md
anc update c70a58f 8 октября 2026 г.
TASKS.md

Sprint 51 — Многопоточность в Python (Junior)

Все задачи одного уровня.

⸻

TASK-J1 — Параллельная отправка уведомлений

Контекст

После крупной распродажи нужно отправить уведомления клиентам.

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

⸻

Данные

import time
users = [
"alex@mail.com",
"kate@mail.com",
"john@mail.com",
"max@mail.com",
"anna@mail.com"
]
def send_email(email):
time.sleep(1)
print(f"Sent: {email}")

⸻

Требования

Запустить отправку писем в отдельных потоках.

⸻

Ожидаемый результат

Вместо ~5 секунд программа должна завершаться примерно за ~1 секунду.

⸻

Что проверяется

  • threading.Thread
  • start()
  • join()

⸻

TASK-J2 — Параллельная обработка заказов

Контекст

Каждый заказ обрабатывается независимо.

⸻

Данные

import time
orders = [1001, 1002, 1003, 1004, 1005]
def process_order(order_id):
time.sleep(2)
print(f"Processed {order_id}")

⸻

Требования

Запустить обработку каждого заказа в отдельном потоке.

После завершения всех потоков вывести:

print("All orders processed")

⸻

Что проверяется

  • Создание множества потоков
  • Ожидание завершения

⸻

TASK-J3 — Мониторинг серверов

Контекст

Есть список серверов.

Проверка каждого занимает 1 секунду.

⸻

Данные

servers = [
"server-1",
"server-2",
"server-3",
"server-4"
]
import time
def ping(server):
time.sleep(1)
print(f"{server}: OK")

⸻

Требования

Выполнить проверку всех серверов одновременно.

Собрать результаты в общий список.

⸻

Что проверяется

  • Потоки
  • Работа с общим объектом

⸻

Sprint 51 — Многопоточность в Python (Middle)

⸻

TASK-M1 — Потокобезопасный счетчик заказов

Контекст

На маркетплейсе несколько потоков одновременно регистрируют новые заказы.

Иногда итоговое количество заказов получается неправильным.

⸻

Данные

orders_count = 0
def create_order():
global orders_count
for _ in range(100_000):
orders_count += 1

⸻

Требования

Запустить 10 потоков.

Итоговое значение должно быть:

1_000_000

⸻

Ограничение

Использовать:

threading.Lock

⸻

Что проверяется

  • Race Condition
  • Mutex
  • Критическая секция

⸻

TASK-M2 — Очередь задач поддержки

Контекст

Пользователи создают тикеты.

Операторы обрабатывают их параллельно.

⸻

Данные

tickets = [
"ticket-1",
"ticket-2",
"ticket-3",
"ticket-4",
"ticket-5",
"ticket-6",
]

⸻

Требования

Реализовать схему:

  • Producer кладет тикеты в очередь.
  • 3 Worker-потока забирают тикеты.
  • После обработки выводят:

Processed ticket-4

⸻

Ограничение

Использовать:

queue.Queue

⸻

Что проверяется

  • Producer / Consumer
  • Thread-safe очередь

⸻

TASK-M3 — Пул потоков для генерации отчетов

Контекст

Каждый отчет строится независимо.

⸻

Данные

reports = [
101, 102, 103, 104,
105, 106, 107, 108
]
def build_report(report_id):
...

⸻

Требования

Использовать:

concurrent.futures.ThreadPoolExecutor

Запускать не более:

max_workers=3

⸻

Результат

Собрать все результаты в список.

⸻

Что проверяется

  • ThreadPoolExecutor
  • futures
  • map / submit

⸻

Sprint 51 — Многопоточность в Python (Senior)

⸻

TASK-S1 — Банковские переводы между счетами

Контекст

В системе одновременно выполняются переводы.

Иногда деньги “теряются”.

⸻

Данные

accounts = {
"A": 10000,
"B": 5000
}

⸻

Функция

def transfer(from_acc, to_acc, amount):
...

⸻

Требования

  1. Запустить десятки переводов параллельно.
  2. Исключить потерю денег.
  3. После завершения:

sum(accounts.values())

должна совпадать с исходной суммой.

⸻

Ограничение

Использовать блокировки.

⸻

Что проверяется

  • Deadlock awareness
  • Lock ordering
  • Атомарность операций

⸻

TASK-S2 — Система бронирования билетов

Контекст

На концерт осталось 100 билетов.

Одновременно приходят тысячи запросов.

⸻

Данные

tickets = 100

⸻

Требования

Реализовать функцию:

book_ticket(user_id)

которая:

  • уменьшает количество билетов;
  • не продает один билет дважды;
  • корректно работает при 1000+ потоках.

⸻

Ожидаемый результат

Продано ровно:

100

билетов.

⸻

Что проверяется

  • Race Condition
  • Synchronization
  • Lock

⸻

TASK-S3 — Реализация собственного Thread Pool

Контекст

Команда хочет понять внутреннее устройство ThreadPoolExecutor.

⸻

Требования

Реализовать класс:

class ThreadPool:
...

⸻

Поддержка

pool.submit(task)
pool.shutdown()

⸻

Внутри использовать

threading.Thread
queue.Queue

⸻

Поведение

pool = ThreadPool(workers=4)
pool.submit(task1)
pool.submit(task2)
pool.submit(task3)
pool.shutdown()

Все задачи должны гарантированно выполниться.

⸻

Что проверяется

  • Архитектура многопоточных приложений
  • Worker Threads
  • Очереди
  • Graceful Shutdown
  • Координация потоков
  • Практическое понимание устройства ThreadPoolExecutor изнутри