[Python-3000] improved threading in py3k (original) (raw)

Josiah Carlson jcarlson at uci.edu
Fri Aug 4 20:17:49 CEST 2006


"tomer filiba" <tomerfiliba at gmail.com> wrote:

python's threading model seems too weak imo. i'm not talking about the GIL and the fact threads run one at a time -- i'm talking about the incompleteness of the API of thread module.

I could have sworn that it could be implemented as a debugging trace function [1], but my tests [2] seem to imply that non-mainthread code doesn't actually have the trace function called.

[1]

import sys import threading

killthese = {} def killthread(thread): ... kill_these[thread] = None ... def trace(*args): ... del args ... if threading.currentThread() in kill_these: ... #pick some exception unlikely/impossible to catch ... raise MemoryError ... return trace ... sys.settrace(trace) def waster(): ... while 1: ... a = 1 ... b = 2 ... c = 3 ... x = threading.Thread(target=waster) x.start() killthread(x) killthese {<Thread(Thread-1, started)>: None} x in killthese True x in threading.enumerate() True threading.enumerate() [<Thread(Thread-1, started)>, <_MainThread(MainThread, started)>]

[2]

import threading import sys seen = {} def trace(*args): ... x = threading.currentThread() ... if x not in seen: ... print x ... seen[x] = None ... return trace ... sys.settrace(trace) def waster(): <_MainThread(MainThread, started)> ... while 1: ... a = 1 ... b = 2 ... c = 3 ... x = threading.Thread(target=waster) x.start()

This is in Python 2.4.3 on Windows.

- - - -

(*) about os.exit -- how about introducing os.exit, which would serve as the "nicer" version of os.exit? os.exit would kill the process in the same way SystemExit kills it (performing cleanups and all). in fact, the interpreter would just call os.exit() when catching SystemExit.

Already exists as sys.exit()



More information about the Python-3000 mailing list