Killing/Terminating a running thread
Chris Liechti
cliechti at gmx.net
Sat Sep 7 16:42:28 EDT 2002
Heiko Wundram <heikowu at ceosg.de> wrote in
news:mailman.1031419029.11871.python-list at python.org:
> Hi to all!
>
> I've looked over google groups, but I've found no real answer that
> satisfied the needs I have. Just a little explanation:
>
> I have a Queue module, which stores method-calls and delegates them to
> threads, which take over running the call. Now it happens that a method
> takes much longer to complete than I would like it to, and in this case,
> the thread running the code should just be terminated, discarding all
> values computed so far.
sound like the news thread "Interrupting Python" could be interresting for
you...
> The basic problem I have that it is pretty much impossible to get at the
> PID of the thread running the code in question; but I have a reference
> to the thread class in a central "garbage-collector" (the queue object).
> And anyway, this approach would only work on Unix (I guess), when using
> pthreads, which create a "real" subprocess with its own PID for a
> thread.
>
> Has anyone had a similar problem, and know of a solution?
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()
you can do that of course with or without a function. a function has the
benefit that you could do additional checks, such as stopping only a
specific thread/worker. (e.g. threading.currentThread() could be used to
test if it the thread to be killed)
chris
--
Chris <cliechti at gmx.net>
More information about the Python-list
mailing list