Python в три ручья: работаем с потоками (часть 1)
Download 29.86 Kb.
|
Python в три ручья
- Bu sahifa navigatsiya:
- Как создавать потоки в Python
Python в три ручья: работаем с потоками (часть 1) В каких случаях вам нужна многопоточность, как реализовать её на Python и что нужно знать о глобальной блокировке GIL. Из этой статьи вы узнаете, как с Python выполнять несколько операций одновременно и распределять нагрузку между ядрами процессора, какие особенности языка учитывать. Но главное — поймете, когда многопоточность в Python нужна, а когда только мешает. Небольшое предупреждение для тех, кто впервые слышит о параллельных вычислениях. Что такое поток и чем он отличается от процесса, мы выяснили в статье «Внутри процесса: многопоточность и пинг-понг mutex'ом». Тогда мы приводили примеры на Java, но теоретические основы многопоточности верны и для Python. Совпадают, в том числе, механизмы синхронизации потоков: семафоры, взаимные исключения (mutex), условия, события. Поэтому сегодня сделаем акцент на особенностях Python, его механизмах и инструментах, связанных с многопоточностью. Организовать параллельные вычисления в Python без внешних библиотек можно с помощью модулей: threading — для управления потоками. queue — для организации очередей. multiprocessing — для управления процессами. Пока нас интересует только первый пункт списка. Как создавать потоки в PythonМетод 1 — «функциональный»Для работы с потоками из модуля threading импортируем класс Thread. В начале кода пишем: from threading import Thread После этого нам будет доступна функция Thread() — с ней легко создавать потоки. Синтаксис такой: variable = Thread(target=function_name, args=(arg1, arg2,)) Первый параметр target — это «целевая» функция, которая определяет поведение потока и создаётся заранее. Следом идёт список аргументов. Если судьбу аргументов (например, кто будет делимым, а кто делителем в уравнении) определяет их позиция, их записывают как args=(x,y). Если же вам нужны аргументы в виде пар «ключ-значение», используйте запись вида kwargs={‘prop’:120}. Ради удобства отладки можно также дать новому потоку имя. Для этого среди параметров функции прописывают name=«Имя потока». По умолчанию name хранит значение null. А ещё потоки можно группировать с помощью параметра group, который по умолчанию — None. За дело! Пусть два потока параллельно выводят каждый в свой файл заданное число строк. Для начала нам понадобится функция, которая выполнит задуманный нами сценарий. Аргументами целевой функции будут число строк и имя текстового файла для записи. Давайте попробуем: #coding: UTF-8 Download 29.86 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling