35. (П17) Багатопоточне завантаження даних із мережі¶
Передумови¶
- Прочитана Лекція 32 — Основи асинхронного програмування та конкурентності в Python
- Прочитана Лекція 34 — Асинхронність усередині Python: GIL, подієвий цикл і сокети
- Встановлена бібліотека
requests:pip install requests
Персоналізація
У файлі оголосіть константу STUDENT = "Imya Prizvysche" (ваші дані латиницею) і виводьте її у першому рядку кожного запуску програми: print(f"Student: {STUDENT}"). На скріншотах у звіті повинно бути видно ваше ім'я.
Завдання¶
1.1 Послідовне завантаження (baseline)¶
Створіть файл threaded_download.py. Напишіть функцію download(url: str) -> None, яка виконує HTTP GET-запит і друкує статус-код та розмір відповіді разом з іменем поточного потоку.
import threading
import time
import requests
STUDENT = "Imya Prizvysche"
def download(url: str) -> None:
name = threading.current_thread().name
print(f"[{name}] start: {url}")
response = requests.get(url)
print(f"[{name}] done: {url} -> {response.status_code}, {len(response.content)} bytes")
if __name__ == "__main__":
print(f"Student: {STUDENT}")
urls = [
"https://httpbin.org/delay/3",
"https://httpbin.org/delay/2",
"https://httpbin.org/delay/1",
"https://httpbin.org/delay/2",
]
# Послідовне завантаження
start = time.perf_counter()
for url in urls:
download(url)
print(f"Sequential: {time.perf_counter() - start:.2f}s")
Завдання: Доповніть threaded_download.py: виконайте ті ж запити паралельно через threading.Thread. Кожному потоку дайте ім'я "downloader-N".
Результат¶
Після виконання роботи здайте звіт зі скріншотами
Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub