python3 有没有什么库 是发布任务--->管道<----执行者 这样的

2018-03-30 01:12:05 +08:00
 jakeyfly

Celery 我有去看了下 好像跟我想的不一样 是个爬虫应用 我的想法简单描述是这样: 比如考试吧,老师是分发考卷的(往队列里 比如 redis 里 塞考卷), 班级就像一个队列,学生们都去班上拿考卷做题目(处理从队列中取数据处理)----做完了题目要交卷(存入数据库或用 orm 操作)

以上描述有点乱,因为我自己本来想实现的,主要因为主流的 scrapy 不适合这个项目,自己去写了后发现,我这样的菜 B,根本完在不了。就想问问有没有什么现成的库包,可以解决这个流程问题。

中间在处理上上的细节,先不考虑(并发多线程之类感觉不是主要问题,增量可能是个问题。)

其实我说的好像就是生产者,消费者模型,但是我总是搞不清楚这个流程

1887 次点击
所在节点    问与答
28 条回复
fiht
2018-03-30 08:23:20 +08:00
伪需求。
重一点的 celery,轻一点的 rq。
再轻一点的 自己用 redis push 和 pop。
这些都不合适说明你的问题不是这个消息队列的问题。

另:
#17 有没有办法控制间隔和速度,这个应该是你爬虫代码(消费者应该要考虑的事情),解决办法很多,例如抓完一个之后 sleep 一段时间,或者将抓取失败时随机等待一段时间,或者抓取失败的丢入一个需要重新抓取的任务队列。
jakeyfly
2018-03-30 09:32:04 +08:00
@fiht 可能我没说明白 不好意思哈 我换种说法,比如 我监控 1000 个页面,我 20 分钟扫描一次这一千个页面,任务发布需要从另一个地方提取数据构造这一千个 URL,压进队列里,我想控制的是这一千个 URL 之间的频率,比如扫 20 个休息 10 秒,这 20 个是并发多线程 ,我现在是用 futues 弄的 设置 20 个线程 他就是同时爬 20 个 但是是连续的。我怕我的代理池顶不住,就想控制其频率。而且这样完全自己写,发布任务的轮询实现的也不理想。就想有没有成熟的包或框架可以用。(其间还要根据每个 URL 的壮态,判定是不是剔除出来,不再发布这个任务)
tabris17
2018-03-30 09:44:27 +08:00
单机的话用命名管道就可以了
Kilerd
2018-03-30 10:09:48 +08:00
其实就是 任务队列而已啊。
locktionc
2018-03-30 10:21:51 +08:00
Redis 有一个发布订阅功能,你可以看看。

更高级的有 Kafka,你也可以看看。
jakeyfly
2018-03-30 11:38:11 +08:00
@locktionc 有了解过 但总感觉 有那么点不对
wellsc
2018-03-30 11:59:43 +08:00
@laxenade 其实 multiprocessing 也支持分布式的
NingAnMe
2018-03-30 12:23:15 +08:00
扫 20 个休息 10 秒
不想用 scrapy,就自己写一层逻辑控制一下

最简单的办法还是用 scrapy,你需要的功能都有,想怎么控制怎么控制。
可以学一下,多一点学习时间,就减一点开发时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/442685

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX