作者os653 (allstar)
看板Python
标题[问题] 有可能将 twisted 包成类似 urllib 的样子吗?
时间Mon Jan 11 17:02:09 2010
之前使用 urllib,曾因不明原因导致程式停住
没有丢出 exception 且错误难以重现
因此这次想改以 twisted 抓取网页
实际用下去後才发现
twisted 的 reactor 无法在重新启动後停止
导致无法把 twisted 包得像 urllib 一样
测试程式如下:
from twisted.web.client import getPage
from twisted.internet import reactor
def success(data):
print '-------- downloading success --------'
print data[0:50]
reactor.stop()
def failed(data):
print '-------- downloading failed --------'
print data
reactor.stop()
def download(url):
d = getPage(url)
d.addCallback(success)
d.addErrback(failed)
print '-------- start downloading --------'
reactor.run()
for i in range(10):
download('
http://www.google.com.tw')
由於 reactor 不能 run 两次导致这样写无法成功
该怎样使用 reactor 才对呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.170.70.102
1F:推 StubbornLin:不能,reactor一但停了就不能再run了 01/11 18:55
2F:→ StubbornLin:我记得看见某处是这样写,忘了在哪 01/11 18:55
3F:→ StubbornLin:你可以考虑开一个thread来run reactor 01/11 18:55
4F:→ StubbornLin:reactor不一定要在main thread里 01/11 18:56
5F:→ StubbornLin:不过为什麽要弄成同步的? twisted长处本来就是非同步 01/11 18:56
7F:→ StubbornLin:还有如果需要blocking的呼叫 可以参考这里 01/11 19:00
9F:→ os653:其实之前就是参考您的文章才知道 twisted 这个东西的 XD 01/11 19:32
10F:→ os653:不开 thread 第一是以前写过的经验,一旦出错实在不好侦错, 01/11 19:34
11F:→ os653:我对 python 的 thread 不够熟。第二是我希望能将程式写成 01/11 19:36
12F:→ os653:wxPython 能用的函式库,wxPython 我也不熟,两个不熟的东西 01/11 19:37
13F:→ os653:凑在一起出错的机会太大,所以想尽量把问题简单化。如果真的 01/11 19:38
14F:→ os653:没办法就开 thread 罗 01/11 19:39
15F:→ kenzou:只能用thread了。 01/11 23:13
16F:推 StubbornLin:喔 那就太简单啦 wxPython和twisted可以整合 01/11 23:29
18F:→ StubbornLin:因为反正都是事件驱动 wxPython的even-driven 01/11 23:31
19F:→ StubbornLin:背後的核心可以用twisted来跑 而且已经帮你写好好的 01/11 23:31
20F:→ StubbornLin:一两行就打死 双剑合并 天下无敌 XD 01/11 23:32
22F:→ StubbornLin:wxPython+twisted 还有另外很多视窗网路程式也是 01/11 23:33
23F:→ StubbornLin:所以你大可放心直接使用就可以了 01/11 23:34
24F:→ os653:没想到官网就有正解,刚刚修改 demo 已经可以达到目标了,感 01/12 00:20
25F:→ os653:谢各位帮助。另外请教一下,当使用 library 的时候,都需要 01/12 00:21
26F:→ os653:从头到尾把 document 看完吗?以这次为例,我只看了 http 的 01/12 00:22
27F:→ os653:部分就下去写了。这种习惯是不是很糟糕阿 ... 01/12 00:26
28F:推 StubbornLin:我的建议是扫一次,不用逐字读 大略扫过去 01/12 02:04
29F:→ StubbornLin:看有什麽可用的东西 再来写比较不容易重写它已有的 01/12 02:04
30F:→ StubbornLin:基本上 twisted强大和丰富完备的程度绝对超过你想像 01/12 02:05
31F:→ StubbornLin:所以通常你会需要的他都有了 01/12 02:05