Pause a thread/ execfile()

2009-10-26 Thread Babloo
i have a small python application with GUI (frontend) which has
various functions. I have a "RUN" button which runs python scripts in
the background . It basically calls execfile() function internally
which runs in a thread ,  to run the python script .

I want to implement a "PAUSE" feature which would pause the running
python script . So do that i have to either pause the thread in which
execfile() runs or pause execfile itself .

When the user presses "RUN" again then the python script should resume
running .


Any ideas how to pause the thread / pause execfile() . Any other ideas
for the same would be helpful .

Thanks
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Pause a thread/ execfile()

2009-10-26 Thread Babloo
On Oct 26, 1:11 pm, Saju Pillai  wrote:
> On 26/10/09 12:28 PM, Babloo wrote:
>
> > i have a small python application with GUI (frontend) which has
> > various functions. I have a "RUN" button which runs python scripts in
> > the background . It basically calls execfile() function internally
> > which runs in a thread ,  to run the python script .
>
> > I want to implement a "PAUSE" feature which would pause the running
> > python script . So do that i have to either pause the thread in which
> > execfile() runs or pause execfile itself .
>
> > When the user presses "RUN" again then the python script should resume
> > running .
>
> > Any ideas how to pause the thread / pause execfile() . Any other ideas
> > for the same would be helpful .
>
> Other ideas ? You could use job control signals if you are on unix. Try
> forking a child process instead of using a thread. Sending SIGSTOP to
> the forked child will stop/pause it, SIGCONT will resume it.
>
> -srp

Hi ,
Thanks for the reply .  I am on windows platform ... yeah if was on
linux things would have been easier !!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Pause a thread/ execfile()

2009-10-26 Thread Babloo
On Oct 26, 1:01 pm, Sean DiZazzo  wrote:
> On Oct 25, 11:58 pm, Babloo  wrote:
>
>
>
> > i have a small python application with GUI (frontend) which has
> > various functions. I have a "RUN" button which runs python scripts in
> > the background . It basically calls execfile() function internally
> > which runs in a thread ,  to run the python script .
>
> > I want to implement a "PAUSE" feature which would pause the running
> > python script . So do that i have to either pause the thread in which
> > execfile() runs or pause execfile itself .
>
> > When the user presses "RUN" again then the python script should resume
> > running .
>
> > Any ideas how to pause the thread / pause execfile() . Any other ideas
> > for the same would be helpful .
>
> > Thanks
>
> I think you can do that with a threading.event().  In the gui, create
> a new threading.event() and pass it in to the worker thread.  Set up
> your code in the worker so that on every iteration of "work", it
> checks to see if the event is set.  If it finds it set, then it
> sleeps, but keeps checking until the event is unset.  When unset
> again, it picks up and begins work again.
>
> In the gui, your pause button just sets and unsets the event, and the
> worker will find out and pause at the next iteration.
>
> Depending on what kind of work your worker thread is doing, it might
> be tough to structure the code so the event gets checked reasonably
> often.  Hope this helps.
>
> ~Sean
>
> PS.  Not sure this idea will hold up when using execfile()

Hi..
Thanks for the reply . Yes tried doing exactly what you have
suggested . i could show you the sample code .
But some how it doesn't work and main reason could be i am using
execfile() in the thread .
I was trying to set the event on the press of a button . It doesnt
pause the thread and instead keeps on executing .
Dont know what the problem could be ???

Sample code :-

$$$
import threading

class TestThread(threading.Thread):
"""
A sample thread class
"""

def __init__(self):
"""
Constructor, setting initial variables
"""
self._stopevent = threading.Event()
self._sleepperiod = 1.0

threading.Thread.__init__(self, name="TestThread")

def run(self):
"""
overload of threading.thread.run()
main control loop
"""
print "%s starts" % (self.getName(),)

count = 0
while not self._stopevent.isSet():
count += 1
print "loop %d" % (count,)
self._stopevent.wait(self._sleepperiod)

print "%s ends" % (self.getName(),)

def join(self,timeout=None):
"""
Stop the thread
"""
self._stopevent.set()
threading.Thread.join(self, timeout)

if __name__ == "__main__":
testthread = TestThread()
testthread.start()

import time
time.sleep(10.0)

testthread.join()

$


-- 
http://mail.python.org/mailman/listinfo/python-list