![]() | 1 dawncold 2017-11-21 15:41:21 +08:00 听起来你打算用一个很慢的队列技术来实现异步非阻塞框架的功能 |
![]() | 2 nilai 2017-11-21 15:43:32 +08:00 这就是分布式的雏形。。。。 |
![]() | 3 wsbnd9 2017-11-21 15:46:40 +08:00 这没有什么问题,简单点用 redis 更好点有 Kafka 然后开多进程去前面队列读取数据进行处理 |
![]() | 4 dawncold 2017-11-21 15:47:44 +08:00 可以做得到,技术上没什么问题,比如 tornado 框架、asyncio 就可以做到 |
5 p2pCoder 2017-11-21 15:47:49 +08:00 我想了解 如何 拿到特定的返回包 |
![]() | 6 picone 2017-11-21 15:49:56 +08:00 还真试过放到 redis 里面的 SET 集合里。 我用 Go 做过一个搜索引擎,当时就是把爬回来的结果发给消费者,消费者处理后把结果放到 Redis 的 SET 里面,同时还能去重,但是有个问题,消费者处理到的 url 越来越多,然后 Redis 存放的体积越来越大。。。 |
7 asuraa 2017-11-21 15:51:08 +08:00 |
![]() | 8 baixiangcpp 2017-11-21 16:03:22 +08:00 scrapy-redis python 安装这个就好了 |
![]() | 11 3IOhG7M0knRu5UlC 2017-11-21 16:11:11 +08:00 via Android 可以啊,这不是很常用方案。要对数据做清洗处理才能入库。 |
![]() | 13 smilekung 2017-11-21 16:26:18 +08:00 没问题啊 我现在就这么做的 更奢侈的是 我回吧 request 返回结果 直接存到 oss 里 然后把 key 丢到队列里 |
![]() | 14 smilekung 2017-11-21 16:27:10 +08:00 不过 request 可以直接发异步请求啊 加一个回调 就可以在收到 response 时处理 |
![]() | 16 dawncold 2017-11-21 16:47:28 +08:00 @p2pCoder linux 系统中把很多功能抽象成文件,比如 socket 也是。简单说就是,对方发送回响应到达本机网卡后,内核会找到等待处理的进程,通知它可以读取数据了。 |
18 cheesea 2017-11-21 20:01:41 +08:00 你去看一下 pyspider 的源码,它就是这么干的。 调度器,下载器,结果处理器通过消息队列沟通,可以在一台机器上跑调度器,另外几台机器跑多个下载器和处理器,实现分布式。 |
![]() | 19 smilekung 2017-11-22 09:44:59 +08:00 via Android @fyooo 基本跟楼上说的一样 要抓取的连接和抓取的内容都通过消息队列交互 如果是你的需求可以直接用一个异步的 request 工具 |
20 lxwu 2017-11-22 13:32:10 +08:00 技术上没什么问题,但是脱离业务场景谈架构是无意义的。 队列最根本的目的还是解耦,你这里说将队列放置在请求之后,而调度与请求还是一个高耦合的状态。 另外,我引入一个业务场景,假设 url ( url1, url2, ...)有抓取优先级,那么你这个设计如何满足需求? |