我正在嘗試使用pyGTK,treads和套接字來構建Python應用程序。我有這個奇怪的錯誤,但考慮到所有的模塊,我不完全確定錯誤在哪裏。我做了一些調試與一些打印語句,以縮小東西下來了一點,我認爲錯誤是在這個代碼片段的話:Python GTK /線程/套接字錯誤
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect(("localhost", 5005))
self.collectingThread = threading.Thread(target=self.callCollect)
self.collectingThread.daemon = True
self.collectingThread.start()
def callCollect(self):
gobject.timeout_add(500, self.collectData)
def collectData(self):
print "hello"
try:
print self.sock.recv(1024)
except:
print "except"
print "return"
return True
所以基本上我想要做的是設置一個插座,連接到一個「服務器」腳本(這實際上只是另一個在本地運行的python腳本),並創建一個單獨的線程來收集來自服務器腳本的所有傳入數據。該線程設置爲每500毫秒運行一次collectData方法。
插入打印語句到collectData方法這裏之後是我注意到運行程序時:
-Initially的GUI是全功能的
- 然後被印刷在所述終端執行以下操作:
hello
**all data received from server script and printed here**
return
hello
-after文本被在終端印刷中,GUI變得完全非功能性的(按鈕不能被按壓等),並且我不得不強制退出關閉應用程序
似乎正在發生的事情是線程打印「hello」,打印來自服務器的數據,並打印「返回」。 500毫秒後,它再次運行collectData方法,打印「hello」,然後嘗試從服務器打印數據。但是,由於沒有數據,所以會引發異常,但由於某些未知原因,它不會執行異常塊中的代碼,並且所有內容都會從此處掛起。
有什麼想法出錯了?
它是「timeout_add」,而不是「timeout_call」。 – AndiDog 2010-09-11 23:40:22
@安迪,哎呀,謝謝,編輯修復思想;-)。 – 2010-09-11 23:45:04
如何明確地告訴次要線程等待事件對象及其相應的信號?我檢查了pyGTK教程中的不同事件,但在插座上找不到任何東西。對不起,我對pyGTK很陌生。 – pythonBOI 2010-09-12 03:34:17