一个任务队列的 module - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XadillaX
V2EX    Node.js

一个任务队列的 module

  •  1
     
  •   XadillaX 2014-05-07 00:55:05 +08:00 3107 次点击
    这是一个创建于 4241 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情很曲折,我某天在萌否收音机里面听到了一首歌,很好听,叫 hypnotized,于是红心了。

    过了几天我再去听发现这首歌变了。

    最后经过多方面求证,我大概得出结果就是应该有人传错了歌,然后后来有人重新传了一遍,导致我听的不是原来那首歌了。那我那天听的那首歌到底叫什么名字呢?

    然后大致看了一下,虽然歌被重新传了,但是 http://moe.fm/music/9600 显示的这首歌的时间没变!还是11分钟,目测是数据库没更新。

    于是我就想了个笨办法,去爬收音机里面所有 tag 为 方project 的专辑,然后跑到专辑页看歌曲的长度。

    问题来了,如果我直接爬,然后爬完 callback 之后又直接爬,没有任何间隔,就相当于我在 DDOS 它的站子。或者即使没那么严重反正最后到一定程度并发太大我就访问不了了。

    于是我就想到了做一个任务队列的 module。该 module 的作用就是把一堆任务扔到队列中,完成一个才开始下一个。

    然后如果同时执行一个也太慢,module 还允许你开多几个子队列同时执行。

    模块的 repo 在 GitHub (https://github.com/XadillaX/scarlet-task) 上面。名字叫 Scarlet Task 的原因一是我本身就喜欢二小姐,二是为了纪念这次事件我是为了找有关二小姐的歌。

    要安装也很简单:

    $ npm install scarlet-task

    然后 repo 的 README.md 里面有使用方法的大致就是实例化一个对象,然后定义好某个任务的任务标识(可以是字符串,可以是 json 对象,可以是任何类型的数据),然后再定义好处理这个任务的函数,将这个数据推倒队列中即可。然后在处理函数中任务处理完的时候执行以下任务完成的函数即可。
    4 条回复    2014-05-08 11:48:29 +08:00
    bakac
        1
    bakac  
       2014-05-08 01:38:17 +08:00
    async.js queue
    tamamaxox
        2
    tamamaxox  
       2014-05-08 09:52:43 +08:00
    支持啊,前几天还在看一个kue的东西
    XadillaX
        3
    XadillaX  
    OP
       2014-05-08 11:48:10 +08:00 via Android
    async 整个库比我的大多了,而且基本上的项目都会在用。我这个只是一个小小的 module,所谓重复造轮子。

    而且有时候并不需要 async 里面的 queue 那么多样化的定制,只需要一个简简单单的任务队列就够了。所以有时候重复造轮子也是有其意义在的。
    XadillaX
        4
    XadillaX  
    OP
       2014-05-08 11:48:29 +08:00 via Android
    @bakac async 整个库比我的大多了,而且基本上的项目都会在用。我这个只是一个小小的 module,所谓重复造轮子。

    而且有时候并不需要 async 里面的 queue 那么多样化的定制,只需要一个简简单单的任务队就够了。所以有时候重复造轮子也是有其意义在的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:25 PVG 00:25 LAX 08:25 JFK 11:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86