Spawing a thread and printing dots until it finishes

sophie_newbie paulgeeleher at gmail.com
Tue Apr 22 12:32:38 EDT 2008


On Apr 22, 4:41 pm, "D'Arcy J.M. Cain" <da... at druid.net> wrote:
> On Tue, 22 Apr 2008 07:10:07 -0700 (PDT)
>
>
>
> sophie_newbie<paulgeele... at gmail.com> wrote:
> > import threading
> > class MyThread ( threading.Thread ):
> >         def run ( self ):
> >                 myLongCommand()...
>
> > import time
>
> > t = MyThread()
> > t.start()
>
> > while t.isAlive():
> >         print "."
> >         time.sleep(.5)
>
> > print "OK"
>
> > The thing is this doesn't print a dot every half second. It just
> > pauses for ages until the thread is finished and prints prints ".OK".
> > But if I take out the "time.sleep(.5)" line it will keep printing dots
> > really fast until the thread is finished. So it looks like its the
> > time.sleep(.5) bit that is messing this up somehow?
>
> We know that your main routine gives up the processor but without a
> full definition of MyThread how do we know that it ever does?  I
> suspect that it hits sleep once, if at all, and then goes to the final
> print statement.  In fact, I suspect that this is not exactly what you
> tried anyway.  This code would not have printed ".OK" whether it
> entered the loop or not.  It could have printed this;
>
> .
> OK
>
> because the print statement in the loop will print a dot on a line by
> itself.
>
> When looking for these sorts of answers you should really try to create
> a smallest program that exhibits the behaviour you are questioning and
> then cut and paste the entire script into your message unedited.  Often
> enough you will even answer your own question in the process.
>
> --
> D'Arcy J.M. Cain <da... at druid.net>         |  Democracy is three wolveshttp://www.druid.net/darcy/               |  and a sheep voting on
> +1 416 425 1212     (DoD#0082)    (eNTP)   |  what's for dinner.

"myLongCommand()... " is a call to an function in R (the statistical
programming language) via Rpy (A python module that allows calls to
R). The call takes a couple of minutes to execute. I'm trying to build
a web front end to this R function and instead of the user looking at
a blank screen for 2-3 mins, I want to print dots to let them feel
like the program isn't hanging.

What I am saying is that without the "time.sleep(.5)" line, the above
code will print dots on the screen continuously for 2-3 mins, filling
it up with a ridiculous ammount of dots.

Whereas with the time.sleep line, instead of pausing for half a second
between dots, its seems to print, as you correctly pointed out:

.
OK

With a pause of 2-3 minutes between the . and the OK.

I hope that clears things up a little. I haven't the faintest idea why
the code above doesn't work but hope someone has an idea. It wouldn't
be something to do with python not being able to handle multiple
threads at the same time or something? I hope there is a workaround.



More information about the Python-list mailing list