Приложение зависает при выполнении запросов 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 есть несколько примеров, или вы можете прочитать мой урок.

Другие вопросы по тегам