ОСНОВНОЕ

WORDPRESS

Операционные системы

Базы данных

Фреймворк Bootstrap

Ум всегда в дураках у сердца (Ф. Ларошфуко).

Многопоточность в Python. Руководство для начинающих

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 18 июля 2017

Многопоточность в Python
Многопоточность является основной концепцией программирования программного обеспечения, почти все на высоком уровне языков программирования поддержки. И многопоточность в Python, один из лучших примеров упрощенной реализации потоков.

В программировании программного обеспечения, поток является наименьшей единицей исполнения с независимым набором инструкций. Это часть процесса и работает в работоспособных ресурсах в том же контексте совместного использования программы, как память. Поток имеет начальную точку, последовательность выполнения, и результат. Он имеет указатель команд, который содержит текущее состояние нити и контролирует то, что выполняется в следующем порядке.

Аналогичным образом, способность процесса выполнять несколько потоков параллельно, называется многопоточностью. В идеале, многопоточный режим может значительно повысить производительность любой программы. И механизм многопоточности в Python очень удобен, которому вы можете быстро научиться.

В данной статье мы научим вас различным методам для создания потоков и осуществлять синхронизацию. Давайте сначала посмотрим на некоторые из основных преимуществ и недостатков многопоточности.

Многопоточность в Python – Плюсы:

  • Многопоточность может значительно улучшить скорость вычислений на многопроцессорных или многоядерных системах, так как каждый процессор или ядро ​​обрабатывает отдельный поток одновременно.
  • Многопоточность позволяет программе оставаться отзывчивым в то время как один поток ожидает ввода, в другой работает графический интерфейс. Это утверждение справедливо как для многопроцессорных или однопроцессорных систем.
  • Все нити процесса имеют доступ к своим глобальным переменным. Если глобальная переменная изменяется в одном потоке, то видима и для других потоков также. Поток может также иметь свои собственные локальные переменные.

Многопоточность в Python – Минусы:

  • На однопроцессорной системе, многопоточность не влияет на скорость вычислений. На самом деле, производительность системы может понизиться из-за накладных расходов на управление потоками.
  • Синхронизация необходима, чтобы избежать взаимного исключения при доступе к общим ресурсам процесса. Это непосредственно приводит к дополнительной памяти и загрузки процессора.
  • Многопоточность увеличивает сложность программы, таким образом, также делает ее трудным для отладки.
  • Повышает вероятность потенциальных тупиков.
  • Это может привести к голоданию, когда поток не получает регулярный доступ к совместно используемым ресурсам. Он потерпит неудачу, чтобы возобновить свою работу.

Ну до сих пор, вы читали теоретические представления о потоках. Если вы новичок в Python, мы бы предложили вам ознакомится с 10 советов быстрого кодирования в Python, которые могут помочь вам в написании кодов многопоточности в Python.

Модули многопоточности в Python для реализации нитей.

Python предлагает два модуля для реализации threads в программах.

  • модуль <thread>
  • модуль <threading>.

Для вашей информации,  модуль <thread> является устаревшим в Python 3 и переименован в модуль <_thread> для обратной совместимости. Но мы объясним оба метода, так как многие пользователи все еще используют унаследованные версии Python.

Основное различие между этими двумя модулями является то, что модуль <thread> реализует нить как функцию. С другой стороны, модуль <threading> предлагает объектно-ориентированный подход для обеспечения возможности создания потоков.

1- Как использовать модуль thread для создания потоков.

Если вы решите применить модуль <thread> в вашей программе, то необходимо использовать следующий метод порождения потоков.

Многопоточность в Python: использование модуля thread

 

Этот метод является достаточно простым и эффективным способом создания потоков. Вы можете использовать его для запуска программ в Linux, так и Windows.

Этот метод запускает новый поток и возвращает его идентификатор. Он будет вызывать функцию, заданную в качестве параметра «function» с переданным списком аргументов. Когда <function> возвращает, поток выходит.

Здесь арг является кортеж аргументов; используя пустой кортеж для вызова <function> без каких – либо аргументов. Необязательный параметр < kwargs > определяет словарь ключевых аргументов.

Если <function> завершается с необработанным исключением, печатается трассирование, а затем выходит нить (Это не влияет на другие потоки, они продолжают работать). Используйте приведенный ниже код, чтобы узнать больше о многопоточности.

Основной пример многопоточности в Python.

Многопоточность в Python: вызов функции факториала из потока.

 

После выполнения программы, вывод будет следующим.

Вывод программы.

Многопоточность в Python: вывод в многопоточных программах.

 

2 – Как использовать модуль потокового создавать темы.

Последний модуль <threading> предоставляет богатые возможности и большую поддержку потоков, чем унаследованный модуль <thread>, рассмотренный в предыдущем разделе. Модуль <threading> является отличным примером многопоточности в Python.

Модуль <threading> объединяет все методы модуля <thread> и предоставляет несколько дополнительных методов.

  • threading.activeCount(): находит общее количество активных объектов thread.
  • threading.currentThread(): вы можете использовать его, чтобы определить количество объектов thread под контролем потока вызывающего потока.
  • threading.enumerate(): даст вам полный список объектов нитей, которые активны в настоящее время.

Помимо перечисленных выше методов, модуль <threading> также представляет класс <Thread>, который вы можете попробовать для реализации thread. Это объектно-ориентированный вариант многопоточности в Python.

Класс <Thread> публикует следующие методы.

Методы классаМетод Описание
run():Это функция точки входа для любого потока.
start():Способ start() запускает поток, когда вызывается метод run.
join([time]):Метод join() позволяет программе ожидать оканчиваются.
isAlive():Метод isAlive() проверяет активную нить.
getName():Метод getName() возвращает имя потока.
setName():Метод setName() обновляет имя потока.

 

2.1- шаги для реализации темы с помощью модуля threading.

Вы можете выполнить следующие шаги, чтобы реализовать новый поток, используя модуль <threading>

  • Построить подкласс от класса <Thread>.
  • Переопределение <__init__(self [,args])> как способ поставки аргументов в соответствии с требованиями.
  • Затем переопределить метод <run(self [,args])> для кодирования бизнес-логики потока.

После того, как вы определите новый подкласс <Thread>, вы должны создать экземпляр, чтобы начать новый поток. Затем, вызовите метод <start()>, чтобы инициировать его. Это в конечном счете вызовет метод <run()> для выполнения бизнес – логики.

Пример – Создание класса потоков и объектов для печати текущей даты.

Многопоточность в Python: пример кода для отображения текущей даты в потоке.

 

2.2- Python Многопоточность – Синхронизация потоков.

Модуль <threading> имеет встроенные функциональные возможности для осуществления блокировки, что позволяет синхронизировать потоки. Блокировка требуется для управления доступом к общим ресурсам для предотвращения повреждения или непринятых данных.

Вы можете вызвать метод Lock(), чтобы применять блокировки, он возвращает новый объект блокировки. Затем, вы можете вызвать метод acquire(blocking) объекта блокировки для обеспечения синхронного выполнения потоков.

Необязательный параметр blocking указывает, ожидает ли нить получения блокировки.

  • В случае, если blocking устанавливается равным нулю, то поток сразу же возвращается с нулевым значением, если блокировка не может быть получена и с 1, если блокировка была приобретена.
  • В случае, если blocking устанавливается в 1, поток блоков ожидает, пока замок освободиться блокировка.

Метод release() объекта блокировки используется для снятия блокировки, когда он больше не требуется.

Просто для информации, структуры, построенные в Python, такие как списки, словари потокобезопасны как побочный эффект, имеющие атомные байты – код для манипулирования ими. Другие структуры данных, реализованные в Python или основных типов, таких как целые и вещественные числа, не имеют такой защиты. Для защиты от одновременного доступа к объекту, мы используем объект Lock.

Python многопоточность примера для блокировки.

Многопоточность в Python: пример кода, демонстрации блокировки.

 

Основная информация – Многопоточность в Python. Руководство для начинающих

Мы хотим, чтобы вы нашли это руководство по многопоточности в Python очень интересным и интуитивно понятным. Кроме того, мы добавили несколько примеров в этом руководстве, что, несомненно, поможет вам поднять ваши навыки Python.

Мы также рекомендуем вам практиковать с новыми многопоточными заданиями для достижения лучших результатов, которые будут стимулировать ваши навыки программирования и знания Python.


Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close