Приложение зависает при выполнении запросов URL
Я делаю небольшое приложение, где я размещаю некоторые параметры с urllib2 на 8 разных сайтах, с интерфейсом командной строки, он работает нормально, но то же самое, когда я использую с wxPython, приложение зависает и показывает, что не отвечает. то же самое произошло, когда я использовал для чтения некоторых файлов, но я преодолел это для чтения файлов с помощью wx.Yield(), но кажется, что wx.Yield () не работает для URL-запросов.
Я использую конструктор BOA для построения кадра.
В сущности программа выглядит так:
def buildURL(url, params):
#url built here
return url
def url1(self, value):
#self.buildURL(url, params)
#makes the request
#searches if there was a valid response
#if yes, show it to txtCtrl2
#same for url2 to url8
def onClickCheck(self, event):
#get the value from txtCtrl1
#Do the required things
AppUrlLibrary = [self.url1(value)...self.url8(value)]
for i in AppUrlLibrary:
if self.abort:
break
else:
wx.Yield() #this seems not working
i
Мне нужна помощь в этом, я твердо верю, что моя структура кодирования неверна! Мне нужно руководство
Все дисплеи и ответы отправляются на txtCtrl2. Благодарю вас!
1 ответ
Проблема в том, что вы блокируете основной цикл графического интерфейса. Другими словами, это долгосрочное задание. Это означает, что вам, вероятно, придется использовать потоки, очереди или подобное, чтобы обойти это. Существует 3 поточно-ориентированных метода: wx.CallAfter, wx.CallLater и wx.PostEvent. Если вы попытаетесь поговорить с вашим графическим интерфейсом без использования одного из потоков, у вас возникнут проблемы. В вики wxPython есть несколько примеров, или вы можете прочитать мой урок.