IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    一個任務隊列的 module

    小鳥遊死月发表于 2015-06-10 03:29:48
    love 0

      事情很曲折,我某天在萌否收音機裏面聽到了一首歌,很好聽,叫 hypnotized,於是紅心了。

      過了幾天我再去聽——發現這首歌變了。

      最後經過多方面求證,我大概得出結果就是應該有人傳錯了歌,然後後來有人重新傳了一遍,導致我聽的不是原來那首歌了。那我那天聽的那首歌到底叫什麼名字呢?

      然後大致看了一下,雖然歌被重新傳了,但是這裏顯示的這首歌的時間沒變!還是11分鐘,目測是數據庫沒更新。

      於是我就想了個笨辦法,去爬收音機裏面所有 tag 爲 東方project 的專輯,然後跑到專輯頁看歌曲的長度。

      問題來了,如果我直接爬,然後爬完 callback 之後又直接爬,沒有任何間隔,就相當於我在 DDOS 它的站子。或者即使沒那麼嚴重——反正最後到一定程度併發太大我就訪問不了了。

      於是我就想到了做一個任務隊列的 module。該 module 的作用就是把一堆任務扔到隊列中,完成一個纔開始下一個。

      然後如果同時執行一個也太慢,module 還允許你開多幾個子隊列同時執行。

      模塊的 repo 在 GitHub 上面。名字叫 Scarlet Task 的原因一是我本身就喜歡二小姐,二是爲了紀念這次事件我是爲了找有關二小姐的歌。

      要安裝也很簡單:

    1
    $ npm install scarlet-task

      然後 repo 的 README.md 裏面有使用方法的——大致就是實例化一個對象,然後定義好某個任務的任務標識(可以是字符串,可以是 json 對象,可以是任何類型的數據),然後再定義好處理這個任務的函數,將這個數據推倒隊列中即可。然後在處理函數中任務處理完的時候執行以下任務完成的函數即可。



沪ICP备19023445号-2号
友情链接