2012-10-03 59 views
0

我有一个运行良好的代码(连接到页面,获取PHPSESSID)。 当我把这些代码在一个函数,然后由它制成的线:如果在线程中运行,urllib2打开程序会挂起

Gdk.threads_enter() 
threading.Thread(target=self.do_login,args=()).start() 
Gdk.threads_leave() 

代码挂在

f = opener.open(req)

任何想法,为什么?

当我强制关闭应用程序时,它会完成所有操作并在终端中打印所有内容而不会出错。为什么它只在线程中挂在特定的行上。它不在线程之外。

+0

你怎么知道它挂在'opener.open(req)'上? – jfs

+0

print“got here”...并重新运行代码。但是当我点击关闭按钮时,一切都完成了。我发现,如果我做一个thread.run()而不是thread.start()一切正常。但.run()函数仍然保持我的图形用户界面冻结,而请求正在处理 –

+1

,所以你看到“打印”之前open()“; sys.stdout.flush()',但不是''后面的'print'。这是对的吗?你想用threads_enter /离开这里来达到什么目的?如果'self.do_login()'直接触及GUI,则应该移动threads_enter /离开。你如何在启动时初始化线程,gtk_main如何被调用?你能提供一个能够再现你的问题的最小完整例子吗? – jfs

回答

1

好的,我只是在这里重新发布评论,以便问题可以得到解决。

正如上关于pygtkthreading其他职位已经提到的,似乎很奇怪出现几个挂机行为可能与没有实施以下行:

gobject.threads_init() 

之前调用GTK主循环。但请注意,它已在其他问题上报告在此计算器上,此解决方案可能适用于Windows,也可能不适用于Windows。

相关问题