Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 246

сбрасывание посуды на пол.

 Запрос — ответ. Мойщик получает подтверждение от сушильщика, а сушиль-

щик — от того, кто откладывает посуду в сторону. Все это выполняется для

каждой тарелки.

 Регулирование нагрузки. Этот прием указывает самому быстрому работнику

притормозить, если один из работников, стоящих после него, не поспевает

за ним.

В реальных системах вам нужно внимательно следить за тем, чтобы все работ-

ники успевали за предложением, в противном случае вы услышите звук бьющейся

Сети

317

посуды. Вы можете добавить новые задачи в список ожидания, а какой-нибудь

процесс будет доставать из этого списка последнее сообщение и помещать в список

обработки. Когда сообщение будет обработано, оно будет удалено из списка об-

работки и добавлено в список завершенных задач. Это позволит вам узнать, какие

задачи были провалены или занимают слишком много времени. Вы можете сделать

это самостоятельно с помощью Redis или использовать систему, которую кто-то

написал и протестировал до вас. Некоторые основанные на Python пакеты для

работы с очередями (часть из них используют Redis) позволяют удобно управлять

процессом.

 Celery. На этот пакет стоит обратить внимание. Он может выполнять распреде-

ленные задачи как синхронно, так и асинхронно, используя рассмотренные нами

методы: multiprocessing, gevent и др.

 thoonk. Этот пакет создан на базе Redis, он позволяет использовать очереди

задач и механизм публикации-подписки (этот механизм будет рассмотрен

в следующем разделе).

 rq. Это библиотека Python для очередей задач, она также основана на Redis.

 Queues. Этот сайт предлагает поучаствовать в дискуссии о программном обес-

печении для создания очередей, как написанном на Python, так и ином.

Сети

Когда мы говорили о конкуренции, то рассматривали только вопросы, связанные

с временем, — решения для одной машины (процессы, потоки, зеленые потоки).

Мы также кратко коснулись некоторых решений, которые могут охватывать всю

сеть (Redis, ZeroMQ). Теперь же рассмотрим работу с сетями и распределение вы-

числений в пространстве.

Шаблоны

Сетевые приложения можно создать на основе некоторых простых шаблонов.

Самым распространенным шаблоном является «запрос — ответ», также извест-

ный как клиент-сервер. Этот шаблон работает синхронно: клиент ожидает ответа

сервера. Вы видели множество примеров использования такого шаблона в этой

книге. Ваш браузер — это также клиент, делающий HTTP-запрос к веб-серверу,

который возвращает ответ.

Еще одним распространенным шаблоном является «разветвление на выходе»:

вы отправляете данные любому доступному работнику из пула процессов. При-

мером является веб-сервер, расположенный за балансировщиком нагрузки.

Противоположностью этого шаблона является шаблон «разветвление на вхо-

де»: вы принимаете данные из одного или более источников. Примером является

318

Глава 11. Конкуренция и сети

регистратор, который принимает текстовые сообщения от нескольких процессов