看板 Python 關於我們 聯絡資訊
之前使用 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
StubbornLin:不能,reactor一但停了就不能再run了 01/11 18:55
StubbornLin:我記得看見某處是這樣寫,忘了在哪 01/11 18:55
StubbornLin:你可以考慮開一個thread來run reactor 01/11 18:55
StubbornLin:reactor不一定要在main thread裡 01/11 18:56
StubbornLin:不過為什麼要弄成同步的? twisted長處本來就是非同步 01/11 18:56
StubbornLin:http://0rz.tw/e250z 我有寫一篇可以參考看看 01/11 18:59
StubbornLin:還有如果需要blocking的呼叫 可以參考這裡 01/11 19:00
StubbornLin:http://0rz.tw/RM3yU 的blockingCallFromThread 01/11 19:00
os653:其實之前就是參考您的文章才知道 twisted 這個東西的 XD 01/11 19:32
os653:不開 thread 第一是以前寫過的經驗,一旦出錯實在不好偵錯, 01/11 19:34
os653:我對 python 的 thread 不夠熟。第二是我希望能將程式寫成 01/11 19:36
os653:wxPython 能用的函式庫,wxPython 我也不熟,兩個不熟的東西 01/11 19:37
os653:湊在一起出錯的機會太大,所以想盡量把問題簡單化。如果真的 01/11 19:38
os653:沒辦法就開 thread 囉 01/11 19:39
kenzou:只能用thread了。 01/11 23:13
StubbornLin:喔 那就太簡單啦 wxPython和twisted可以整合 01/11 23:29
StubbornLin:請看這篇 http://0rz.tw/1KD4T 01/11 23:30
StubbornLin:因為反正都是事件驅動 wxPython的even-driven 01/11 23:31
StubbornLin:背後的核心可以用twisted來跑 而且已經幫你寫好好的 01/11 23:31
StubbornLin:一兩行就打死 雙劍合併 天下無敵 XD 01/11 23:32
StubbornLin:http://0rz.tw/BfqR1 我的這程式就是用 01/11 23:33
StubbornLin:wxPython+twisted 還有另外很多視窗網路程式也是 01/11 23:33
StubbornLin:所以你大可放心直接使用就可以了 01/11 23:34
os653:沒想到官網就有正解,剛剛修改 demo 已經可以達到目標了,感 01/12 00:20
os653:謝各位幫助。另外請教一下,當使用 library 的時候,都需要 01/12 00:21
os653:從頭到尾把 document 看完嗎?以這次為例,我只看了 http 的 01/12 00:22
os653:部分就下去寫了。這種習慣是不是很糟糕阿 ... 01/12 00:26
StubbornLin:我的建議是掃一次,不用逐字讀 大略掃過去 01/12 02:04
StubbornLin:看有什麼可用的東西 再來寫比較不容易重寫它已有的 01/12 02:04
StubbornLin:基本上 twisted強大和豐富完備的程度絕對超過你想像 01/12 02:05
StubbornLin:所以通常你會需要的他都有了 01/12 02:05