WINXP vs. LINUX in threading.Thread

Mike Driscoll kyosohma at gmail.com
Thu Apr 23 09:30:28 EDT 2009


On Apr 22, 2:57 pm, Kent <kent.y... at gmail.com> wrote:
> hello all,
>
> i want to add a "new update notification" feature to my wxPython appl.
> The codes below do the job. The logic is simple enough, I don't think
> it needs to be explained.
>
> since sometimes, under windows, proxy setting was a script. and was
> set in IE. In this case, connecting to the HTML will take relative
> long time. I therefore run the following codes in a new Thread
> (subclass of threading.Thread), so that user don't have to wait during
> the version checking period.
>
> Under Linux, it worked smoothly. But under Windows XP, it didn't. If
> there was new updates, the notification dialog can show, but no text,
> icon, .... on it. Then, the whole application didn't response any
> longer. :( I have to force stop the application process.
>
> where is the problem?
>
> Thanks.
>
> code to get the version from a HTML:
>
> def getLatestVersion(versionUrl):
>     #proxy is only for testing
> #    proxy_support = urllib2.ProxyHandler
> ({"http":"10.48.187.80:8080"})
> #    opener = urllib2.build_opener(proxy_support)
> #    urllib2.install_opener(opener)
>     #proxy is only for testing
>
>     result = ''
>     try:
>         f = urllib2.urlopen(versionUrl)
>         s = f.read()
>         f.close()
>         result = s.split("#xxx#")[1]
>     except:
>         pass
>     return result
>
> Thread class:
>
> class UpdateChecker(Thread):
>     def __init__(self):
>         Thread.__init__(self)
>
>     def run(self):
>         lv = util.getLatestVersion(config.VERSION_URL)
>         if lv>config.VERSION:
>             showUpdateDialog(lv)
>
> codes to start the thread:
>
> updatechk = UpdateChecker()
> updatechk.start()

You are probably blocking wxPython's main loop. There are several
examples of using threads with wxPython on their wiki:
http://wiki.wxpython.org/LongRunningTasks

As you will find, there are various methods within wxPython that are
threadsafe (such as wx.CallAfter) and you can use those to communicate
with and update your GUI. From what I've read, this is normal across
GUI toolkits. They all have special ways to work with threads.

In the future, I highly recommend that you join and post to the
wxPython list as that's where you'll get the best targeted advice (see
their website). This list is great for general questions though.

- Mike



More information about the Python-list mailing list