0
我有一个运行良好的代码(连接到页面,获取PHPSESSID)。 当我把这些代码在一个函数,然后由它制成的线:如果在线程中运行,urllib2打开程序会挂起
Gdk.threads_enter()
threading.Thread(target=self.do_login,args=()).start()
Gdk.threads_leave()
代码挂在
f = opener.open(req)
任何想法,为什么?
当我强制关闭应用程序时,它会完成所有操作并在终端中打印所有内容而不会出错。为什么它只在线程中挂在特定的行上。它不在线程之外。
你怎么知道它挂在'opener.open(req)'上? – jfs
print“got here”...并重新运行代码。但是当我点击关闭按钮时,一切都完成了。我发现,如果我做一个thread.run()而不是thread.start()一切正常。但.run()函数仍然保持我的图形用户界面冻结,而请求正在处理 –
,所以你看到“打印”之前open()“; sys.stdout.flush()',但不是''后面的'print'。这是对的吗?你想用threads_enter /离开这里来达到什么目的?如果'self.do_login()'直接触及GUI,则应该移动threads_enter /离开。你如何在启动时初始化线程,gtk_main如何被调用?你能提供一个能够再现你的问题的最小完整例子吗? – jfs