Terminate a thread that doesn't check for events

Liu Shuai lshuai at kaneva.com
Mon Aug 8 11:26:59 EDT 2005


Thank you for the help Chris and Jp. Just wanted to let you know that I 
re-wrote a "stoppable" version of the function I was calling in the
thread instead of forcing the thread to terminate. I think it worth the
effort as the solution is now clean and portable.

Thanks again for all your input.

LS
 
> -----Original Message-----
> From: python-list-bounces+sliu=kaneva.com at python.org
[mailto:python-list-
> bounces+sliu=kaneva.com at python.org] On Behalf Of Chris Lambacher
> Sent: Tuesday, August 02, 2005 12:16 PM
> To: python-list at python.org
> Subject: Re: Terminate a thread that doesn't check for events
> 
> No.  On Linux a separate thread is a separate process with shared
memory.
> You
> can send a signal to a particular process and catch that signal as an
> indication that you need to terminate (perhapse something that is set
up
> before running your long running process so that it is generic).  In
> windows
> threads are separate beasts from processes(almost) and there are
functions
> for
> terminating them (though I don't think gracefully).  Unfortunately I
can't
> comment on other platforms.
> 
> -Chris
> 
> On Tue, Aug 02, 2005 at 11:54:57AM -0400, Liu Shuai wrote:
> > Thanks for the reply Chris.
> >
> > Are you suggesting running the task in a *separate* process instead
of a
> > separate *thread*? Because if that's the case, I will have to share
data
> > (and possible memory) between that new process and my "master"
process
> > since they depend on one other.
> >
> > Yeah I will sure post it if I can find an elegant solution.
> >
> > Thank you,
> > LS
> >
> > > -----Original Message-----
> > > From: Chris Lambacher [mailto:lambacck at computer.org]
> > > Sent: Tuesday, August 02, 2005 11:50 AM
> > > To: Liu Shuai
> > > Subject: Re: Terminate a thread that doesn't check for events
> > >
> > > Hi,
> > >
> > > There is no cross platform way to do this.  You need to
periodically
> > check
> > > a
> > > quit flag, or perform a platform specific action to terminate it.
On
> > > Linux
> > > you can send the process a signal.  On windows you will need to
use
> > the
> > > win32all package.  If you decide to go the later route, maybe you
> > could
> > > encapsulate the thread termination code in a module and share it
with
> > the
> > > Python community.
> > >
> > > -Chris
> > >
> > > On Tue, Aug 02, 2005 at 09:51:31AM -0400, Liu Shuai wrote:
> > > >    Can someone please comment on this?
> > > >
> > > >
> > > >
> > > >
> >
---------------------------------------------------------------------
> > > -----
> > > >
> > > >    From: python-list-bounces+sliu=kaneva.com at python.org
> > > >    [mailto:python-list-bounces+sliu=kaneva.com at python.org] On
Behalf
> > Of
> > > Liu
> > > >    Shuai
> > > >    Sent: Monday, August 01, 2005 4:29 PM
> > > >    To: python-list at python.org
> > > >    Subject: Terminate a thread that doesn't check for events
> > > >
> > > >
> > > >
> > > >    Hi all,
> > > >
> > > >
> > > >
> > > >    I am aware that similar and probably same questions have been
> > posted
> > > many
> > > >    times, but I was unable to find a solution after reading a
dozen
> > > threads
> > > >    in the archive. So here it goes again.
> > > >
> > > >
> > > >
> > > >    I have a thread that does some heavy task (hash calculation,
for
> > > >    instance). I need a mechanism that works *across platforms*
to
> > stop
> > > that
> > > >    calculation if user decides to exit. How can I do that?
> > > >
> > > >    I can not do the standard "periodical checking" way since
there
> > is
> > > only
> > > >    one function/step call in my thread.
> > > >
> > > >
> > > >
> > > >    Here is a snippet of my thread classes to help illustrate the
> > > problem:
> > > >
> > > >
> > > >
> > > >    class Dispatcher():
> > > >
> > > >        def __init__(self):
> > > >
> > > >                self.__worker = Worker()
> > > >
> > > >
> > > >
> > > >        def start(self):
> > > >
> > > >            self.__worker.start()
> > > >
> > > >
> > > >
> > > >        def stop():
> > > >
> > > >                #how do i stop the worker?
> > > >
> > > >
> > > >
> > > >    class Worker(threading.Thread):
> > > >
> > > >        def __init__(self):
> > > >
> > > >
> > > >
> > > >        def run(self):
> > > >
> > > >                oneTimeConsumingCall()
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >    Thank you in advance for any suggestions/pointers.
> > > >
> > > >
> > > >
> > > >    LS
> > >
> > > > --
> > > > http://mail.python.org/mailman/listinfo/python-list
> >
> >
> > --
> > http://mail.python.org/mailman/listinfo/python-list
> --
> http://mail.python.org/mailman/listinfo/python-list





More information about the Python-list mailing list