Проект «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

 


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

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

Контакты для обмена ссылками между сайтами Видео к статьям на Youtube Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и Linux Код обмена баннерами
Мои друзья: www.info-x.org - Информационный ресурс о ОС FreeBSD XaXaTyXa.ru Новости Ubuntu Linux Сообщество сисадминов Личный сайт skeletora Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

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

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