надсмотрщик простой распределены очереди предназначены для обработки большого числа разовых задач.
Мы построили это на DISQUS обращаться часто, но необычные задачи, такие как "мигрировать эти данные в новую схему".
Почему?
Вы можете спросить, "Почему бы не использовать сельдерей?". Ну ответ это просто, что нормальный очереди требует (не в буквальном смысле, но это было бы больно без него) вам буфер все задачи в центре города. Это становится проблемой, когда у вас есть большое количество задач, особенно когда они содержат большое количество данных.
Представьте себе, у вас есть 1 млрд задач, каждая весом в 5к. То, несжатый, при минимальных 4 терабайт дискового пространства, необходимых только, чтобы держать, что вокруг, и получает вы очень мало.
Надсмотрщик с другой стороны предназначен взять возобновляемое итератор, и только тянуть в максимальном количестве рабочих мест, в то время (с использованием стандартного Python Очередь в). Это гарантирует постоянную практику памяти, которую можно масштабировать линейно.
Использование
Создать итератор, и обратный вызов:
импорт гнездо
# Мы должны обеспечить тайм-аут по умолчанию ** не установлен или случайного ** дерьмо попадет в вентилятор.
socket.setdefaulttimeout (нет)
# Надсмотрщик / example.py
четкости get_jobs (последняя = 0):
& NBSP; # последний будет отправлено, если государство было возобновлено
& NBSP; # из предыдущего запуска
& NBSP; ибо я в xrange (фамилия, 100000000):
& NBSP; # рабочих мест привели должен быть serializeable рассолом
& NBSP; выход я
Def handle_job (я):
& NBSP; # это ** ** обязательно идемпотентным, а возобновление процесса может выполнять работу
& NBSP; #, которые уже были работать
& NBSP; печать "Got% г!" % я
Spawn мастер:
& NBSP; TM-мастер taskmaster.example
Spawn раба:
& NBSP; TM-ведомый taskmaster.example
Или икру 8 рабов (каждый из которых содержит ThreadPool):
& NBSP; ТМ-8 икру taskmaster.example
Dont как волшебный функции открыть для мастер / раба? Укажите свои собственные цели:
& NBSP; TM-мастер taskmaster.example: get_jobs $ TM-ведомый taskmaster.example: handle_job
Примечание: Все аргументы являются необязательными, и по умолчанию будет локальный, без ключа Идент
Требования :.
- Python
Комментарии не найдены