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