V2EX 首页   注册   登入
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请 登入
Sponsored by
唐茶 字节社
中文世界最好的电子书城
V2EX  ›  Python

求助 Twisted 核心 reactor 理念

By gonghao at 225 天前, 1105 次点击
不知又没有童鞋研究过这货,现在有如下一个问题:

自己想做一个 http 客户端,到网站抓取内容,同时该客户端相当于一个 api,需要将抓取到的内容处理之后返回给 api 调用端(这个调用初步打算就是本地调用,基于库的调用)。由于看到 Twisted 的异步事件比较给力,所以索性尝试尝试,但是对于其核心的 reactor 理念还不甚掌握,整个想法进行下来,感觉有太多 tricky 的东西在里面。

目前自己是这样做的:
基于 Twisted 提供的 http 方法,包装了一个 Request 的类,处理 http 请求,当请求完成之后用 Deferred 对象调用回调。但是目前整个程序就感觉只有这块内容需要用到 reactor 做 main loop,其余部分应该是没必要吧?所以由于 reactor 这个纠结的东西存在,现在自己是把它放到一个 thread 里面做,但是我认为每个请求 reactor.run() 之后,请求完成 reactor.stop() 直接关掉。但是当第二个请求到来时,就没办法再 reactor.run() 抛出 reactor 不可重启的异常,因此感觉目前思路有问题,所以请教有经验的童鞋指点指点~谢谢!
9 回复  |  直到 2011-10-23 13:06:04 PM
    1
makestory   225 天前
没有用过 Twisted ,不过刚好看到了文章有解释 reactor 。拿来给楼主参考下 http://thinkinweb.heroku.com/posts/5-ruby (见 Non blocking 那部分)

建议看下 reactor.run() ,reactor.stop() 的源码~ 感觉像是用法有问题
    2
phus   225 天前
兄弟看tornado/gevent吧
    3
gonghao   225 天前
@makestory 3Q~~看源码应该是最直接,但需要一些功力啊~有鸭梨~~

@phus 额,这次主要是想用一下 twisted 的这个异步事件,体验一下~由于是搞 js 的,所以想要体验一把 python 里面的异步,嘻嘻~不过对于我这种需求,直接上一个 tornado 是不是能用到的功能也不多哦~ twisted 主要就是用它的 defer 和 http 的一些东西~
    4
gonghao   225 天前
@phus 额,刚木有仔细看 tornado 文档,现在发现有这个模块 tornado.httpclient — Non-blocking HTTP client ~嘻嘻,谢谢哈,我研究研究~
    5
weijia   215 天前
reactor是类似于windows的消息处理循环。一直在那里等待新连接,或者时间之类事件,应该是在整个应用程序生命周期内运行。为什么要处理完一个消息就stop啊?就应该一直让reactor运行,让他在有新连接进来时生成request来处理请求。搜了一个介绍的。不知道有没有帮助。

http://book.51cto.com/art/200806/77290.htm
    6
gonghao   215 天前
@weijia 灰常感谢,现在我也在重新审视自己之前的理解~应该重新转变观念~
    7
gonbo   215 天前
@gonghao 这些都有人做了。scrapy.org
    8
gonghao   214 天前
@gonbo 谢谢哈,我研究研究~
    9
gonbo   214 天前
@gonghao 爬虫更多是需要解析分析,爬得快慢,并发多少,好像不是主要的工作。这也是爬虫研究更多的是分布式爬虫,充分利用多个计算机cpu来分析解析爬到的内容。
Linode
关于   |   FAQ   |   我们的愿景   |   广告投放   |   工作空间   |   Gadget Lab   |   博客   |   上网首页   |   294 人在线   最高记录 362
创意工作者们的社区
Lovingly made by OLIVIDA
VERSION: 3.0.0-dev
♥ Do have a faith in what you're doing.