import time
import threading
from concurrent.futures import ThreadPoolExecutor
from multiprocessing import Pool # для процессов
import math
def downloads(name):
print("Начали загружать файл", name)
time.sleep(1) # программа ост-я на 1 секунду
print("Готово", name)
def practice_1():
start = time.perf_counter()
for i in range(5):
downloads(i)
print("Последовательно: ", time.perf_counter() - start)
start = time.perf_counter()
threads = [] # список потоков
for i in range(5):
t = threading.Thread(target=downloads, args=(i,)) # созадли поток
t.start() # запустили
threads.append(t)
for t in threads:
t.join() # ожидает завершения потока
print(f"Параллельно: {time.perf_counter() - start}")
def practice_2():
"""работа с 1й переменной"""
balance = [100]
lock = threading.Lock()
def wit(amount):
if balance[0] >= amount: # мой баланс не может быть меньше 0
time.sleep(0.0010) #е1 е2
balance[0] = balance[0] - amount
t1 = threading.Thread(target=wit, args=(100,))
t2 = threading.Thread(target=wit, args=(100,))
t1.start()
t2.start()
t1.join()
t2.join()
print("C блокировкой", balance)
"""Пулл потоков"""
def fetch(url):
time.sleep(1)
return f"Данные с {url}"
def practice_3():
urls = ["site1", "site2", "site3", "site4"]
start = time.perf_counter()
with ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(fetch, urls))
print(f"Время: {time.perf_counter() - start}")