[問題] 有可能將 twisted 包成類似 urllib 的樣子嗎?

看板Python作者 (allstar)時間15年前 (2010/01/11 17:02), 編輯推噓4(4027)
留言31則, 3人參與, 最新討論串1/1
之前使用 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

01/11 18:55, , 1F
不能,reactor一但停了就不能再run了
01/11 18:55, 1F

01/11 18:55, , 2F
我記得看見某處是這樣寫,忘了在哪
01/11 18:55, 2F

01/11 18:55, , 3F
你可以考慮開一個thread來run reactor
01/11 18:55, 3F

01/11 18:56, , 4F
reactor不一定要在main thread裡
01/11 18:56, 4F

01/11 18:56, , 5F
不過為什麼要弄成同步的? twisted長處本來就是非同步
01/11 18:56, 5F

01/11 18:59, , 6F
http://0rz.tw/e250z 我有寫一篇可以參考看看
01/11 18:59, 6F

01/11 19:00, , 7F
還有如果需要blocking的呼叫 可以參考這裡
01/11 19:00, 7F

01/11 19:00, , 8F
http://0rz.tw/RM3yU 的blockingCallFromThread
01/11 19:00, 8F

01/11 19:32, , 9F
其實之前就是參考您的文章才知道 twisted 這個東西的 XD
01/11 19:32, 9F

01/11 19:34, , 10F
不開 thread 第一是以前寫過的經驗,一旦出錯實在不好偵錯,
01/11 19:34, 10F

01/11 19:36, , 11F
我對 python 的 thread 不夠熟。第二是我希望能將程式寫成
01/11 19:36, 11F

01/11 19:37, , 12F
wxPython 能用的函式庫,wxPython 我也不熟,兩個不熟的東西
01/11 19:37, 12F

01/11 19:38, , 13F
湊在一起出錯的機會太大,所以想盡量把問題簡單化。如果真的
01/11 19:38, 13F

01/11 19:39, , 14F
沒辦法就開 thread 囉
01/11 19:39, 14F

01/11 23:13, , 15F
只能用thread了。
01/11 23:13, 15F

01/11 23:29, , 16F
喔 那就太簡單啦 wxPython和twisted可以整合
01/11 23:29, 16F

01/11 23:30, , 17F
請看這篇 http://0rz.tw/1KD4T
01/11 23:30, 17F

01/11 23:31, , 18F
因為反正都是事件驅動 wxPython的even-driven
01/11 23:31, 18F

01/11 23:31, , 19F
背後的核心可以用twisted來跑 而且已經幫你寫好好的
01/11 23:31, 19F

01/11 23:32, , 20F
一兩行就打死 雙劍合併 天下無敵 XD
01/11 23:32, 20F

01/11 23:33, , 21F
http://0rz.tw/BfqR1 我的這程式就是用
01/11 23:33, 21F

01/11 23:33, , 22F
wxPython+twisted 還有另外很多視窗網路程式也是
01/11 23:33, 22F

01/11 23:34, , 23F
所以你大可放心直接使用就可以了
01/11 23:34, 23F

01/12 00:20, , 24F
沒想到官網就有正解,剛剛修改 demo 已經可以達到目標了,感
01/12 00:20, 24F

01/12 00:21, , 25F
謝各位幫助。另外請教一下,當使用 library 的時候,都需要
01/12 00:21, 25F

01/12 00:22, , 26F
從頭到尾把 document 看完嗎?以這次為例,我只看了 http 的
01/12 00:22, 26F

01/12 00:26, , 27F
部分就下去寫了。這種習慣是不是很糟糕阿 ...
01/12 00:26, 27F

01/12 02:04, , 28F
我的建議是掃一次,不用逐字讀 大略掃過去
01/12 02:04, 28F

01/12 02:04, , 29F
看有什麼可用的東西 再來寫比較不容易重寫它已有的
01/12 02:04, 29F

01/12 02:05, , 30F
基本上 twisted強大和豐富完備的程度絕對超過你想像
01/12 02:05, 30F

01/12 02:05, , 31F
所以通常你會需要的他都有了
01/12 02:05, 31F
文章代碼(AID): #1BIkaJTh (Python)
文章代碼(AID): #1BIkaJTh (Python)