Celery 我有去看了下 好像跟我想的不一样 是个爬虫应用 我的想法简单描述是这样: 比如考试吧,老师是分发考卷的(往队列里 比如 redis 里 塞考卷), 班级就像一个队列,学生们都去班上拿考卷做题目(处理从队列中取数据处理)----做完了题目要交卷(存入数据库或用 orm 操作)
以上描述有点乱,因为我自己本来想实现的,主要因为主流的 scrapy 不适合这个项目,自己去写了后发现,我这样的菜 B,根本完在不了。就想问问有没有什么现成的库包,可以解决这个流程问题。
中间在处理上上的细节,先不考虑(并发多线程之类感觉不是主要问题,增量可能是个问题。)
其实我说的好像就是生产者,消费者模型,但是我总是搞不清楚这个流程
|      1bazingaterry      2018-03-30 01:20:56 +08:00 via iPhone 消息隊列? | 
|  |      2congeec      2018-03-30 01:23:05 +08:00 via iPhone FIFO, 来,楼下随手写一个 | 
|  |      31iuh      2018-03-30 01:38:29 +08:00 celery 就是做这个的呀。。 | 
|      4jakeyfly OP @bazingaterry 是吧 最好是基于 redis 的 能保存状态的 | 
|      7laxenade      2018-03-30 01:57:57 +08:00 via Android 自带的 Multiprocessing 感觉就符合 lz 的要求 | 
|  |      9wellsc      2018-03-30 02:11:14 +08:00 rq | 
|  |      10binux      2018-03-30 02:19:41 +08:00 Celery 和你想的是一样的,至少可以实现你想的。 | 
|  |      11ericls      2018-03-30 02:19:55 +08:00 celery | 
|  |      15Trim21      2018-03-30 02:31:32 +08:00 via Android | 
|      20laxenade      2018-03-30 07:09:06 +08:00 @jakeyfly #8 你想分布的话用 multiprocessing 就不行了,但如果只是一台机子的话,multiprocessing 完全够了。 | 
|  |      21fiht      2018-03-30 08:23:20 +08:00 伪需求。 重一点的 celery,轻一点的 rq。 再轻一点的 自己用 redis push 和 pop。 这些都不合适说明你的问题不是这个消息队列的问题。 另: #17 有没有办法控制间隔和速度,这个应该是你爬虫代码(消费者应该要考虑的事情),解决办法很多,例如抓完一个之后 sleep 一段时间,或者将抓取失败时随机等待一段时间,或者抓取失败的丢入一个需要重新抓取的任务队列。 | 
|      22jakeyfly OP @fiht 可能我没说明白 不好意思哈  我换种说法,比如 我监控 1000 个页面,我 20 分钟扫描一次这一千个页面,任务发布需要从另一个地方提取数据构造这一千个 URL,压进队列里,我想控制的是这一千个 URL 之间的频率,比如扫 20 个休息 10 秒,这 20 个是并发多线程 ,我现在是用 futues 弄的 设置 20 个线程 他就是同时爬 20 个 但是是连续的。我怕我的代理池顶不住,就想控制其频率。而且这样完全自己写,发布任务的轮询实现的也不理想。就想有没有成熟的包或框架可以用。(其间还要根据每个 URL 的壮态,判定是不是剔除出来,不再发布这个任务) | 
|  |      23tabris17      2018-03-30 09:44:27 +08:00 单机的话用命名管道就可以了 | 
|  |      24Kilerd      2018-03-30 10:09:48 +08:00 其实就是 任务队列而已啊。 | 
|  |      25locktionc      2018-03-30 10:21:51 +08:00 Redis 有一个发布订阅功能,你可以看看。 更高级的有 Kafka,你也可以看看。 | 
|  |      28NingAnMe      2018-03-30 12:23:15 +08:00 扫 20 个休息 10 秒  不想用 scrapy,就自己写一层逻辑控制一下 最简单的办法还是用 scrapy,你需要的功能都有,想怎么控制怎么控制。 可以学一下,多一点学习时间,就减一点开发时间。 |