TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.4K subscribers
Post #7655 2.48K
🧠 Почему потоки в Python не всегда ускоряют код

Частая мысль:
«Добавлю threading → станет быстрее»


На практике — не факт.

В чём причина

В классическом Python есть GIL — он не даёт нескольким потокам выполнять код одновременно.

Поэтому:
✔️ I/O (API, файлы) → быстрее
✔️ CPU (вычисления) → почти нет

С появлением PEP 703 Python постепенно уходит от GIL. Теперь потоки могут работать параллельно.

Где всё ломается:

counter += 1


На деле это: read → compute → write

В потоках это приводит к race condition:

import threading

counter = 0

def worker():
global counter
for _ in range(1_000_000):
counter += 1

threads = [threading.Thread(target=worker) for _ in range(8)]

for t in threads: t.start()
for t in threads: t.join()

print(counter) # ≠ 8_000_000


«Фикс», который замедляет:

lock = threading.Lock()

with lock:
counter += 1


Работает правильно, но: потоки стоят в очереди → параллельности нет

Как правильно:

from concurrent.futures import ThreadPoolExecutor

def worker():
local = 0
for _ in range(1_000_000):
local += 1
return local

with ThreadPoolExecutor(max_workers=8) as ex:
result = sum(ex.map(lambda _: worker(), range(8)))

print(result) # 8_000_000


💡 Главное правило

Потоки не должны делить данные во время работы: делят → медленно, независимы → быстро

📍 Навигация: Вакансии • Задачи • Собесы

Библиотека питониста

#буст
  • 👍 3
  • ❤ 2
More from @pyproglib
  1. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  2. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  5. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  6. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →