【发布时间】:2010-09-11 23:23:46
【问题描述】:
我正在尝试使用 pyGTK、踏板和套接字构建 Python 应用程序。我遇到了这个奇怪的错误,但考虑到所有涉及的模块,我不完全确定错误在哪里。我对一些打印语句进行了一些调试以缩小范围,我认为错误出现在这段代码的 sn-p 中:
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 方法后,我在运行程序时注意到:
-最初的 GUI 功能齐全
-然后在终端打印以下内容:
hello
**all data received from server script and printed here**
return
hello
-在终端中打印文本后,GUI 变得完全不起作用(按钮无法按下等),我必须强制退出以关闭应用程序
似乎正在发生的事情是线程打印“hello”,打印来自服务器的数据,然后打印“return”。 500 毫秒后,它再次运行 collectData 方法,打印“hello”,然后尝试从服务器打印数据。然而,由于没有数据留下,它引发了一个异常,但由于某种未知原因,它没有执行异常块中的代码,一切都从那里挂起。
知道出了什么问题吗?
【问题讨论】:
标签: python multithreading sockets gtk