Python evolution: Unease

Michael Hobbs mike at
Tue Jan 4 11:02:07 EST 2005

Ville Vainio <ville at> wrote:
> What form of extreme dynamic behaviour have you been using lately?

One real-world example: in my new coverage analysis tool (to be 
released any month now), I need to trace threads without changing any
code. To do so, I redefine the thread.start_new_thread() function from
outside the thread module, like so:

orig_start_new_thread = thread.start_new_thread

def traced_start_new_thread(func, args, kwargs={}):
    return orig_start_new_thread(traced_func_call, (func, args, kwargs))

def traced_func_call(func, args, kwargs):
    func(*args, **kwargs)

thread.start_new_thread = traced_start_new_thread

Granted, doing something like this on a regular basis is really bad
coding style, but the ability to do something like this when I really
need it is what I love about Python.

More information about the Python-list mailing list