Laszlo Nagy schrieb:


        def run(self):
                while True:
                        if exit_event.isSet():
                                # Thread exiting
                                return
                        try:
                                data = q_in.get(timeout = .5)
                        except Queue.Empty:
                                continue
                        # ... process data
And then in the MainThread I do exit_event.set() and wait for all threads to exit. It's a pretty awkward solution but works.

BTW Guys, is something like Thread.kill() planned for the future? Or is there a reason not to have it?
Python threads are cooperative. I think there was a discussion about this, about a year ago or so. The answer was that in CPython, the interpreter has this GIL. Python threads are always running on the same processor, but they are not "native". There are operating system functions to kill a thread but you must not use them because it can crash the interpreter.

This is not correct. Neither are threads cooperative nor are they not native. If they weren't cooperative they needed explicit re-scheduling statements in the code. And they also are based on native OS threads.

They might *appear* not cooperative if a long-running C-call doesn't release the GIL beforehand.

This of course doesn't affect other parts of your reasoning about killing threads being a bad idea and such.

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

Reply via email to