-
Notifications
You must be signed in to change notification settings - Fork 1.2k
WeibSpider中所有任务及其作用说明
wpm edited this page May 15, 2017
·
4 revisions
任务队列如下表
名称 | 作用 |
---|---|
login_queue | 登录任务,它必须最先执行,因为其它任务都得依赖它 |
user_crawler | 用户个人资料抓取任务 |
fans_followers | 粉丝和关注抓取任务,由user_crawler 调用 |
search_crawler | 微博特定话题搜索任务 |
home_crawler | 用户主页抓取任务 |
ajax_home_crawler | 用户主页关于ajax请求的相关任务 |
comment_crawler | 抓取第一页评论的任务 |
comment_page_crawler | 根据第一页评论分发的抓取其它页评论的任务 |
使用任务路由的最大好处是你可以为不同的节点分配不同的任务,这样让整个系统的数据采集效率更高。比如用户抓取,一个http请求只能得到一个用户信息,而对于用户关注和粉丝抓取,一个http请求可以得到几十个关注或者粉丝用户的uid,所以可以部署一个用户关注或者粉丝抓取节点,部署10个或者更多的用户信息抓取节点,让任务能比较均衡地执行。
具体用法如下
celery -A tasks.workers -Q login_queue,user_crawler worker -l info --concurrency=1 -Ofair
我在分布式节点A
上指定了queue是 login_queue
和 user_crawler
,那么节点A只会执行关于这两个queue的任务,如果想在节点B
上执行微博特定话题搜索任务,那么就需要在分布式节点B的命令行输入
celery -A tasks.workers -Q search_crawler worker -l info --concurrency=1 -Ofair
然后再说说各个启动参数的意思:-A
指定celery app为tasks.workers
, -Q
指定节点接受的任务队列,-l
表示的是日志等级,比如info
、debug
等,--concurrency
是worker的线程数,这里规定为1(因为账号很少,如果并发数太大,账号被封的风险就会相应增加),celery默认采用多线程的方式实现并发,我们也可以让它使用
基于异步IO的方式实现并发,具体参考Celery Concurrency,-Ofair
是避免让celery发生死锁。启动worker的语句需要切换到项目根目录下执行。关于celery更为详细的
知识请参考celery的任务路由说明。