DevGang
Авторизоваться

NodeJS: Управление тысячами задач с @pscraper/taskm

Каждый кодер должен испытать это, используя цикл for для обработки большого количества задач. Например, скачивание 999 999 999 изображений, удаление 999 веб-сайтов с форума. For-Loop хорош, если все идет хорошо, но всякий раз, когда возникает исключение (особенно задания, связанные с HTTP / Internet) и вызывает остановку программы. Как мы обычно имеем дело c Restart, и вы никогда не узнаете, когда удача придет и задача закончится.

Эта библиотека предназначена для управления большим количеством задач, путем добавления каждой задачи в очередь (sqlite) и переваривания каждого элемента очереди. Вот причины использования taskm:

  1. у вас есть большое количество задач для обработки, исключение может вызвать перезапуск сценария с первого раза
  2. у вас есть большое количество задач, и вам нужно знать, какие из них имеют состояния pending, finished или fail
  3. у вас есть большое количество задач для обработки, и эти задачи могут быть переварены более чем одним компьютером

Установка

npm install @pscraper/taskm

Пример-1 (FIFO)

Найти еще примеры можно тут:

Добавление новой задачи в очередь (FIFO)

const TM = require('@pscraper/taskm')
const taskm = new TM()
await taskm.init()
const uniqueId = "amazingId"
const options = {
    title: 'amazingTitle',
    meta: JSON.stringify({key: "key1"})
}
await taskm.add(uniqueId, options)

Получение задачи из очереди

const TM = require('@pscraper/taskm')
const taskm = new TM()
await taskm.init()
const item = await taskm.getFirst()
// do something
await taskm.markFinished(item.id)

Пример 2 (Распределение задач)

Добавление нового задания в очередь

const TM = require('@pscraper/taskm')
const taskm = new TM()
await taskm.init()
for(let i =0 ; i<999999; i++) {
    const id = `mockId${new Date().getTime()}-${i}`
    const title = `${id}-title-${i}`
    inputList.push({id, title})
    await taskm.add(id, {title})
}

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

const TM = require('@pscraper/taskm')
const taskm = new TM()
await taskm.init()
const item = await taskm.getFirstRandom()
// do something
await taskm.markFinished(item.id)

Использование

Ссылка:

  1. https://www.freertos.org/Embedded-RTOS-Queues.html
  2. https://github.com/wahengchang/pscraper/tree/master/packages/taskm

Источник:

#NodeJS
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить