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