[Twisted-Python] thoughts on a reactor feature

Bruce Mitchener bruce at cubik.org
Mon Sep 23 14:54:22 EDT 2002


Hey all,

When working with Twisted, an important thing is to make sure that the 
reactor is running often enough and that tasks are not starving the 
reactor.  (This is obvious.)

I think it'd be nice if the reactor supported some interface for 
discovering, diagnosing and debugging long running tasks.  This could be 
done in a few different ways.

One would be have an interface to POSIX clocks and track the amount of 
time spent between calls out of reactor.run() and report anything that 
takes over a specified threshold of time to execute.

Another is to implement some sort of stack trace sampling where you 
periodically take a stack trace when a utility program is running and 
you've noted periods of long latency.

I know how to do that sort of thing in C or C++, but not in Python.  Is 
it possible? Efficient enough to actually do?  Would it need some native 
code for high enough resolution clocks?

Much of this would also provide the support needed for something like a 
top-for-reactor as well or to be able to print out all currently queued 
activities.

Information about what each thread in the thread pools are doing would 
be useful as well.  This would match the sort of functionality that DBs 
provide to diagnose their behaviors and what they're currently doing 
with each thread.

For some information on POSIX clocks, see this:

http://www.opengroup.org/onlinepubs/007904975/functions/clock_settime.html

The _POSIX_CPUTIME and _POSIX_THREAD_CPUTIME extensions are particularly 
useful for this sort of thing.  This would (obviously) have to have 
platform dependencies.  The information on the Linux glibc compliance 
with the various POSIX options can be found at:

http://people.redhat.com/drepper/posix-option-groups.html

So, for Linux people, this should all work.  Other platforms would 
either need to have similar support for the specifications, an alternate 
API with an interested implementor, or would need to just not offer the 
additional capability.

Thoughts? Better or simpler ways to do this?

  - Bruce





More information about the Twisted-Python mailing list