Я немного смущен тем, работает ли многопоточность в Python или нет.
Я знаю, что было много вопросов об этом, и я прочитал многие из них, но я все еще смущен. Я знаю по собственному опыту и видел, как другие публиковали свои собственные ответы и примеры здесь, в StackOverflow, что многопоточность действительно возможна в Python. Итак, почему все говорят, что Python заблокирован GIL и что за один раз может работать только один поток? Это явно работает. Или есть какое-то различие, которого я не получаю здесь?
Многие плакаты/респонденты также отмечают, что потоковая передача ограничена, поскольку она не использует несколько ядер. Но я бы сказал, что они все еще полезны, потому что они работают одновременно и, таким образом, ускоряют совместную работу. Я имею в виду, почему в противном случае может существовать модуль потоков Python?
Update:
Спасибо за все ответы. Я понимаю, что многопоточность будет выполняться параллельно для некоторых задач ввода-вывода, но может запускать только один за один раз для нескольких ключевых задач, связанных с процессором.
Я не совсем уверен, что это означает для меня в практическом плане, поэтому я просто приведу пример такой задачи, которую я хотел бы использовать для многопоточности. Например, допустим, что я хочу пройти через очень длинный список строк, и я хочу выполнить некоторые основные операции с строками в каждом элементе списка. Если я разделил список, отправьте каждый подсписок, который будет обработан моим циклом/строковым кодом в новом потоке, и отправьте результаты обратно в очередь, будут ли эти рабочие нагрузки загружаться в одно и то же время? Самое главное, это теоретически ускорит время, затрачиваемое на запуск script?
Другим примером может быть, если я смогу отображать и сохранять четыре разных изображения, используя PIL в четырех разных потоках, и иметь это быстрее, чем обрабатывать изображения по очереди один за другим? Я предполагаю, что эта составляющая скорости - это то, о чем я действительно задумываюсь, а не о правильной терминологии.
Я также знаю о модуле многопроцессорности, но сейчас мой основной интерес - это задачи с малой и средней нагрузкой (10-30 секунд), и поэтому я думаю, что многопоточность будет более уместной, поскольку подпроцессы могут быть медленными для запуска.