NodeJS: Управление тысячами задач с @pscraper/taskm
Каждый кодер должен испытать это, используя цикл for для обработки большого количества задач. Например, скачивание 999 999 999 изображений, удаление 999 веб-сайтов с форума. For-Loop хорош, если все идет хорошо, но всякий раз, когда возникает исключение (особенно задания, связанные с HTTP / Internet) и вызывает остановку программы. Как мы обычно имеем дело c Restart
, и вы никогда не узнаете, когда удача придет и задача закончится.
Эта библиотека предназначена для управления большим количеством задач, путем добавления каждой задачи в очередь (sqlite) и переваривания каждого элемента очереди. Вот причины использования taskm
:
- у вас есть большое количество задач для обработки, исключение может вызвать перезапуск сценария с первого раза
- у вас есть большое количество задач, и вам нужно знать, какие из них имеют состояния
pending
,finished
илиfail
- у вас есть большое количество задач для обработки, и эти задачи могут быть переварены более чем одним компьютером
Установка
npm install @pscraper/taskm
Пример-1 (FIFO)
Найти еще примеры можно тут:
Contribute to wahengchang/pscraper development by creating an account on GitHub.
Добавление новой задачи в очередь (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)