WINXP vs. LINUX in threading.Thread

Kent kent.yuan at gmail.com
Thu Apr 23 05:43:17 EDT 2009


Thanx you guys.

Now my program is working.

I used the Thread subclass. and at the end of the run method, i call
wx.CallAfter(mainFrame.somefunction, para) to show the dialog or
change some text. I tested in winxp&linux. both worked.


Kent

On Apr 23, 6:16 am, Carl Banks <pavlovevide... at gmail.com> wrote:
> On Apr 22, 5:34 pm, Lie Ryan <lie.1... at gmail.com> wrote:
>
>
>
> > Diez B. Roggisch wrote:
> > > Kent schrieb:
> > >> 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?
>
> > > GUI-toolkits and threads usually are not a good idea (Qt4 being an
> > > exception to that rule, at least they claim that). Google wxPython +
> > > threading for answers how to solve this - essentially, you need to
> > > create a timer or event-based solution that allows your
> > > background-thread to inject a status message to the main eventloop.
>
> > > Diez
>
> > You should use the GUI toolkit's own event loop for threading. An event
> > loop is some sort of cooperative multithreading mechanism,
>
> The function in question, gethostbyname, isn't cooperating, though.
> It blocks for a substantial amount of time from an event handler,
> freezing the application.
>
> > if you used
> > the threading mechanism from the threading library, there will be two


> > conflicting threading mechanism, resulting in many hard-to-predict
> > situation if you're not careful. The wxYield mechanism is much easier
> > option than multithreading.
>
> The problem is, during most of the delay wxYield can't be called
> becaust the function gethostbyname is blocking.
>
> I think Diez is correct.  To avoid the freeze, one should spawn a
> thread, and when it completes it should notify the GUI thread by
> pushing an event or scheduling an idle call.  Functions that do that
> are usually thread-safe.  (A permanent worker thread might be better
> but it would involve a lot more synchronization.)
>
> Carl Banks




More information about the Python-list mailing list