Killing/Terminating a running thread
Chris Liechti
cliechti at gmx.net
Sat Sep 7 18:05:57 EDT 2002
Heiko Wundram <heikowu at ceosg.de> wrote in
news:mailman.1031434090.15525.python-list at python.org:
> Am Sam, 2002-09-07 um 22.42 schrieb Chris Liechti:
>> sound like the news thread "Interrupting Python" could be
>> interresting fo
> r
>> you...
>
> I've looked at that, but the main problem is that this thread deals
> with interrupting fullblown processes on the fly (from within the
> code), not with interrupting a process by an exterior signal.
ah, sorry. i dont follow that thread.
>> the clean solution is to test for a flag and terminate if the flag is
>> set
> .
>>
>> e.g. you could provide a function:
>>
>> def interrupted():
>> return global_flag_if_user_wants_to_abort
>>
>> and in you function in the queue:
>>
>> def worker():
>> while not interrupted():
>> do_stuff()
>
> This is what I do to shutdown the worker cleanly. The problem is:
> do_stuff() doesn't return until it's complete, and I have no control
> whatsoever about the internal workings of do_stuff().
then you have a problem... if you could enforce the use of the intterupted
function or flag it would work flawlessly on all platforms.
> What I actually wish to do is while the worker still is in do_stuff(),
> to kill the worker as a whole, to discard all its data, when a timeout
> on returning a value from do_stuff() occurs. It's not about clean
> termination of a thread, but about killing the thread in case it takes
> too long (in case do_stuff() takes to long).
it's maybe possible to kill threads on linux, but i think its a risky thing
to do anyway. it could have an impact on stability of the other/main
threads.
you cold start worker _processes_ you can kill those cleanly (maybe not on
Win9x but on every real OS ;-). that requires inter-process communication.
there are diffrent sorlutions to achieve that, e.g. "pyro" or a corba
implementation.
if you realy need to kill a worker and have no controll over its
implementation, then i think that you can't avoid using processes.
> Thanks for the advice anyway! :) I guess I at least did the general
> interrupt on the worker right then... :)
chris
--
Chris <cliechti at gmx.net>
More information about the Python-list
mailing list