Многопоточность Python Yay или Nay? - PullRequest
4 голосов
/ 16 мая 2011

Я пытался написать простое приложение на Python для реализации рабочей очереди На каждой веб-странице, посвященной потокам, есть какой-то случайный парень, который комментирует это, вы не должны использовать потоки Python, потому что кто-то может мне помочь? что случилось с потоками Python, могу ли я использовать его или нет? если да, то какая библиотека? стандартный достаточно хорош?

Ответы [ 3 ]

5 голосов
/ 16 мая 2011

Потоки Python идеально жизнеспособны и полезны для многих задач.Поскольку они реализованы с собственными потоками ОС, они позволяют выполнять блокирующие системные вызовы и продолжают «работать» одновременно - вызывая системный вызов блокировки в отдельном потоке.Это очень полезно для программ, которые должны выполнять несколько задач одновременно (например, GUI и другие циклы событий) и даже могут повысить производительность для задач, связанных с вводом-выводом (таких как очистка веб-страниц).

Однако из-зак глобальной блокировке интерпретатора, которая исключает интерпретатор Python на самом деле , выполняющий более одного потока одновременно, если вы планируете распределить код с интенсивным использованием ЦП по нескольким ядрам ЦП с потоками и улучшитьпроизводительность таким образом, вам не повезло.Однако это можно сделать с помощью модуля multiprocessing, который обеспечивает интерфейс, аналогичный threading, и распределяет работу, используя процессы , а не потоки .

IТакже следует добавить, что расширения C не обязательно должны быть связаны с GIL, и многие выпускают его, поэтому расширения C могут использовать несколько ядер с помощью потоков.

Итак, все зависит отчто именно вам нужно сделать.

0 голосов
/ 16 мая 2011

GIL должен предоставить вам некоторую информацию по этой теме.

0 голосов
/ 16 мая 2011
  • Вам не нужно нужно , чтобы использовать многопоточность.95% кода не нужны потоки.
  • Да, многопоточность Python совершенно корректна, она реализована через собственные потоки операционной системы.
  • Используйте модуль стандартной библиотеки threading, это отлично.
...