Рубрики
Без рубрики

Пальмонство Python: пример очереди

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Python поставляется с множеством прохладных инструментов параллелизма встроенным встроенным, таким как нить, очереди, семафоры и многопроцессорные. В этой статье мы проведем некоторое время на изучение того, как использовать очереди. Очередь может использоваться для первых в первых или последних в последних лавнях, подобных технологиям, подобно использованию, если вы просто используете их напрямую. Если вы хотите увидеть это в действии, см. Статью Hellman в конце этого поста. Мы собираемся смешивать нити и создать простой сценарий загрузчика файлов, чтобы продемонстрировать, как работают очереди для случаев, когда мы хотим параллелизм.

Создание приложения загрузки

Этот код осторожно основан на статье Hellman и статье IBM, поскольку они оба показывают, как загружать URL-адреса различными способами. Эта реализация фактически загружает файлы. Мы будем использовать Соединенные Штаты адские (упс, я имею в виду внутреннюю) налоговые формы обслуживания доходов для нашего примера. Давайте притворяться, что мы маленький владелец бизнеса, и нам нужно скачать кучу этих форм для наших сотрудников. Вот какой-то код, который подойдет нашему потребностям:

Давайте немного сломаемся. Прежде всего, нам нужно посмотреть на Главная Определение функции, чтобы увидеть, как это все потоки. Здесь мы видим, что он принимает список URL. Затем основная функция создает экземпляр очереди, который он проходит до 5 демоновских потоков. Основным отличием между нитями демоновской и недемона является то, что вы должны отслеживать нити без демона и закройте их самостоятельно, тогда как с нитью демона, вы в основном просто устанавливаете их и забыли их, и когда ваше приложение закрывается, они тоже закрываются. Далее мы загружаем очередь (используя его метод PUT) с URL-адресами, которые мы передали. Наконец мы говорим очередь дождаться потоков, чтобы выполнить их обработку через метод соединения. В классе загрузки у нас есть строка «Self.Queue.get ()», которые блокируют, пока очередь не будет возвращать. Это означает, что темы просто сидят идентично ждут, чтобы что-то поднять. Это также означает, что для потока «получить» что-то из очереди, он должен вызвать метод «Получить» очереди. Таким образом, когда мы добавляем или помещаем элементы в очередь, пул резьбы заберет или «получить» элементы и обрабатывать их. Это также известно как «присвоение». Как только все элементы в очереди обрабатываются, скрипт заканчивается и выходит. На моей машине он загружает все 5 документов под секунду.

Дальше чтение