Перезапустите лямбду по таймауту - PullRequest
0 голосов
/ 04 октября 2019

Работа в веб-поиске с помощью Python 3. У меня есть список URL-адресов, каждый URL-адрес содержит более 100 URL-адресов статей (включая нумерацию страниц).

Добавлен скрипт в lambda. Во-первых, он читает URL-адреса из CSV-файла и отправляет каждый основной URL-адрес в функцию, где выбираются все href каждой статьи.

все вышеописанные процессы работают нормально.

проблема в том, что, как мы знаем, lambda имеетвремя из 15 минут, поэтому нам нужно повторить то же самое с конечной точкой, где номер страницы URL и оставшийся URL.

CSV-файл считывается пандами и преобразуется в каталог. выберите объект из словаря и перейдите к функции с регулярным выражением страницы, количеством страниц для удаления (разбиение на страницы).

можем ли мы сохранить текущую страницу и оставшиеся URL-адреса в локальной папке в lambda и renunто же самое, если так, как мы можем сделать то же самое.

1 Ответ

2 голосов
/ 04 октября 2019

Локальное хранилище в Lambda не гарантирует согласованности. Будет запущен новый экземпляр Lambda, и вы потеряете эти данные.

Я бы предложил иметь событие cron Cloudwatch, которое вызовет лямбду (назовем это DispatcherLambda). Эта лямбда будет смотреть на файл CSV (может, лучше хранить эти данные, как в DynamoDB?) И решать, как будет разделяться работа. Например:

1-10 URLs: worker #1
11-20 URLs: worker #2
... 

Как только будет решено, что лямбда будет публиковать события в очередь SQS (входной сигнал события будет содержать этот диапазон). Подписавшись на очередь, будет еще одна лямбда (скажем, WorkerLambda), которая будет выполнять фактическую очистку. Таким образом, у вас не возникнет проблем с тайм-аутом, гораздо быстрее завершите работу (вызывая параллелизм), и она станет более отказоустойчивой (если Lambda выйдет из строя, SQS может запустить ее снова).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...