[Python-Dev] Status of thread cancellation (original) (raw)

glyph at divmod.com glyph at divmod.com
Fri Mar 16 23:00:22 CET 2007


On 12:06 am, greg.ewing at canterbury.ac.nz wrote:

glyph at divmod.com wrote:

Can you suggest any use-cases for thread termination which will not result in a completely broken and unpredictable heap after the thread has died? Suppose you have a GUI and you want to launch a long-running computation without blocking the user interface. You don't know how long it will take, so you want the user to be able to cancel it if he gets bored.

That's a perfectly reasonable use-case which doesn't require this feature at all ;).

Interaction with the rest of the program is extremely limited -- some data is passed in, it churns away, and some data is returned. It doesn't matter what happens to its internal state if it gets interrupted, as it's all going to be thrown away.

If that's true, then the state-sharing features of threads aren't required, which is the right way to design concurrent software anyway.

In that situation, it doesn't seem unreasonable to me to want to be able to just kill the thread. I don't see how it could do any more harm than using KeyboardInterrupt to kill a program, because that's all it is -- a subprogram running inside your main program.

The key distinction between threads and processes is the sharing of internal program state.

How would you handle this situation?

Spawn a process, deliver the result via an event.

If you're allergic to event-driven programming, then you can spawn a process in a thread, and block in the thread on reading from the process's output, then kill the process and have that terminate the output, which terminates the read(). This is a lot like having a queue that you can put a "stop" object into, except the "file" interface provided by OSes is kind of crude. Still no need to kill the thread.

At the end of the day though, you're writing a GUI in this use-case and so you typically must be cognizant of event-driven issues anyway. Many GUIs (even in the thread-happy world of Windows) aren't thread-safe except for a few specific data-exchange methods, which behave more or less like a queue.

One of the 35 different existing ways in which one can spawn a process from Python, I hope, will be sufficient for this case :). -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/python-dev/attachments/20070316/131a3f48/attachment.html



More information about the Python-Dev mailing list