作者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