Посты с тэгом queue


Python: модуль Queue. Перевод документации. Примеры работы с очередями

Модуль Queue реализует механизм очереди. Он особенно полезен в многопоточном программировании, когда необходимо безопасно передавать информацию между потоками. Класс Queue этого модуля реализует всю необходимую семантику блокировки.
Типы очередей

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

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


Multiprocessing

Узнал про модуль spynner, это такой управляемый браузер. Если на страничке много трудноподдающегося JavaScript-а, то вместо urllib2 или curl можно попробовать натравить на него spynner. Основы работы с ним можно почитать здесь. В общем был он нужен мне, но проблема в том, что он достаточно медленный, а работать в несколько потоков с ним не представляется возможным, так он берет своё начало от GUI-класса библиотеки Qt, которые в свою очередь можно использовать только в main-потоке. Поэтому вместо многопоточности пришлось думать о многопроцессовости. Ну это тоже самое если сделать однопоточный скрипт и
запустить одновременно N его копий. Про многопоточность я уже написал один пост



Python / Генерим PDF бочками

Предыстория


На хабре неоднократно упоминались различные инструменты и способы создания скриншотов WEB страниц.

Хочу поделиться собственным «велосипедом» для создания PDF на Python и QT, дополненным и улучшенным для централизованного использования несколькими проектами.

Изначально генерация запускалась из PHP скрипта, примерно так:

<?php
// локальный файл
exec('xvfb-run python2 html2pdf.py file:///tmp/in.html /tmp/out.pdf');
// или URL
exec('xvfb-run python2 html2pdf.py http://habrahabr.ru /tmp/habr.pdf');
?>

этого было достаточно и все было хорошо…


В очередь

Эти слайды изначально были подготовлены для доклада в формате Печа Куча для PyCon UA, 24 октября 2010 года.

Веб-приложение — как игра в теннис, вы не должны задерживать "мяч" у себя. Получили запрос — как можно быстрее обработали его — отдали ответ.

Но что если задание не "влезает" в цикл запрос-ответ. Например, вам нужно отправить несколько сотен писем, или послать твит, а твиттер перегружен, вариантов множество

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