Я трохи заплутаний у тому, працює багатопоточність у Python чи ні.
Я знаю, що з цього приводу було багато питань, і я їх багато читав, але все ще бентежусь. Я знаю з власного досвіду і бачив, як інші публікують власні відповіді та приклади тут, на StackOverflow, що багатопотоковість дійсно можлива в Python. То чому всі постійно кажуть, що Python заблокований GIL і що одночасно може працювати лише один потік? Очевидно, це працює. Або є якась різниця, яку я тут не отримую?
Багато плакатів / респондентів також постійно згадують, що потокове обмеження обмежене, оскільки воно не використовує кілька ядер. Але я б сказав, що вони все ще корисні, оскільки вони працюють одночасно, і таким чином швидше виконують комбіноване навантаження. Я маю на увазі, чому в іншому випадку взагалі існував би модуль потоку Python?
Оновлення:
Дякую за всі відповіді на сьогодні. Я розумію, що багатопотоковість буде виконуватися паралельно лише для деяких завдань вводу-виводу, але може виконуватися лише по одній для кількох основних завдань, пов'язаних з процесором.
Я не зовсім впевнений, що це означає для мене на практиці, тому я просто наведу приклад того типу завдання, яку я хотів би багатопотоковою. Наприклад, скажімо, я хочу прокрутити дуже довгий список рядків, і я хочу виконати деякі основні операції з рядками для кожного елемента списку. Якщо я розділю список, відправлю кожен підсписок на обробку моїм кодом циклу / рядка в новому потоці та відправляю результати назад у чергу, чи будуть ці робочі навантаження працювати приблизно одночасно? Найголовніше, чи теоретично це пришвидшить час, необхідний для запуску сценарію?
Іншим прикладом може бути, якщо я можу візуалізувати та зберегти чотири різні картинки за допомогою PIL у чотирьох різних потоках, і чи це буде швидше, ніж обробка зображень одна за одною одна за одною? Я думаю, що ця швидкісна складова - це те, що мені насправді цікаво, а не яка правильна термінологія.
Я також знаю про модуль багатопроцесорної обробки, але зараз мій головний інтерес полягає у малих та середніх навантаженнях завдань (10-30 секунд), і тому я думаю, що багатопотоковість буде доцільнішою, оскільки ініціювати підпроцеси може повільно.