Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ Python ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

SQL\T-SQL

FreeBSD and Nix

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Python: простой пример работы с процессами и потоками


Очень простой для понимания пример запуска параллельно нескольких потоков.

 

Простой пример с запуском нескольких потоков одновременно:

 

Конечно функционал модуля threading намного богаче, есть возможность работы с блокировками:

 

Модуль Queue имеет три типа очередей, разница заключается в порядоке получаемых значений:

Отдельное спасибо за перевод по этому модулю данной страницеhttp://john16blog.blogspot.co.il/2012/05/python-queue.html

class Queue.Queue(maxsize)

Очередь типа FIFO (First Input First Output - первым вошел, первым вышел). 

maxsize - параметр типа integer, который устанавливает предел для числа элементов, которые могут быть помещены в очередь. Вставка новых элементов блокируется, как только этот размер был достигнут, до тех пор пока элементы не будут удалены из очереди. Если значение параметра равно или меньше нуля, то очередь будет бесконечной.

class Queue.LifoQueue(maxsize)
Класс реализующий очередь LIFO, или по другому "стэк"(Last Input First Output - последним вошел, первым вышел).

maxsize аналогичен параметру в классе Queue.Queue.

class Queue.PriorityQueue(maxsize)
Класс реализующий очередь с приоритетами. Параметр maxsize аналогичен параметру в классе Queue.Queue. 

Элементы, добавляемые в подобную очередь должны представлять из себя кортеж типа (значение приоритета, данные). Первыми из очереди забираются элементы с меньшим приоритетом, полученным с помощью функции sorted().

И отдельное спасибо за краткую и удобную справку: http://www.py-my.ru/post/4bfb3c691d41c846bc000066#!

Queue.Queue() - отдает значения по принципу "первый пришел - первый ушел"
Queue.LifoQueue() - "последний пришел - первый ушел"
Queue.put(item [ , block [ , timeout]]) - при добавлении значения можно блокировать очередь, что-б не возникало коллизий
Queue.get([ block [ , timeout]]) - при получении значения можно блокировать очередь, что-б одновременной другой поток не выхватил данные, данная ф-ия ждет пока не появятся данные, при истечении тайм аута, если он задан, срабатывает exception
Queue.get_nowait() - взять значение без ожидания, если данных нет то срабатывает exception Queue.Empty

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект