2014-01-08 95 views
0

使用async queues使我能夠將下載任務添加到具有給定併發性的隊列中。Node.js:同步文件下載隊列

當前問題:任務啓動異步文件下載,所以任務在開始下載後有「運行」,而不是完成後。這打破了併發機制。

現在我想創建一個完全同步工作的下載任務(將URL內容寫入給定的本地文件路徑),以便添加到隊列中的任務中的請求不會超過給定的併發性。

歡迎任何圖書館和方法。 代碼應該只關注文件從給定的URL下載到給定的路徑 - 沒有路徑創建,錯誤處理等。

+0

「*以便添加到隊列中的任務中的請求不會超過給定的併發性*」您目前如何使用async.queue()?這些任務不應超過「併發」。另外,你真的需要它們是同步還是隻是[serial](https://npmjs.org/package/async#series)? –

+0

目前,我將1000個任務推送到隊列中,並將併發設置爲20,因爲應該同時運行20個下載。我更新的問題更詳細。 – Conic

回答

0

如果你想重用你的異步工作者,你可以嘗試這種方法。異步隊列具有小於或等於併發性的工作人員以及具有輔助事件/功能的等待隊列。所以:

  • 不要將所有的URL /任務添加到您的異步隊列。爲他們維護一個單獨的隊列。
  • 當啓動等於併發的彈出任務時,您需要並使用異步隊列的push方法將其添加到異步隊列中。也爲其啓動觸發器運行函數。
  • 您的異步隊列現在以最大併發運行。發送一個額外的任務,將進入等待隊列。
  • 等待emtpy事件並使用事件處理程序運行添加的額外任務啓動觸發器。同時從您的隊列中彈出另一個任務並將其添加到異步隊列中。