2014-01-08 4 views
0

Использование async queues позволило мне добавить задачи загрузки в очередь с заданным параллелизмом.Node.js: очередь для загрузки синхронных файлов

Текущая проблема: задачи запускают загрузку асинхронного файла, поэтому задача запускается после запуска загрузки, а не после завершения. Это нарушает механизм параллелизма.

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

Любая библиотека и подход приветствуются. Код должен фокусироваться только на загрузке файла с заданного URL-адреса на заданный путь - без создания пути, обработки ошибок и т. Д.

+0

"* так, чтобы запросы в задачах, добавленных в очередь, не превышали заданный параллелизм *« Как вы используете 'async.queue()' в настоящее время? Задачи не должны превышать «параллелизм». Кроме того, вам действительно нужно, чтобы они были синхронными или просто [serial] (https://npmjs.org/package/async#series)? –

+0

В настоящее время я нажимаю 1000 задач в очередь и устанавливаю параллелизм 20, потому что 20 загрузок должны выполняться одновременно. Я уточняю вопрос, чтобы быть более подробным. – Conic

ответ

0

Если вы хотите повторно использовать своих асинхронных работников, вы можете попробовать этот подход. В очереди Async рабочие меньше или равны параллелизму и очереди ожидания со вспомогательными событиями/функциями. Итак:

  • Не добавляйте все URL-адреса в свою асинхронную очередь. Поддерживайте для них отдельную очередь.
  • При запуске поп-задач, равных параллелизму, которые вы хотите, и добавьте в очередь асинхронного вызова с асинхронной очередью нажмите. Также запускайте функции для запуска триггера.
  • Ваша очередь для асинхронных вызовов теперь работает с максимальным параллелизмом. Отправьте дополнительную задачу, которая перейдет в очередь ожидания.
  • Ждать emtpy Событие и запустить дополнительный запуск запуска задач с помощью обработчика событий. Также вытащите еще одну задачу из своей очереди и добавьте ее в очередь async.
Смежные вопросы