I was working on a server for a client in Python using SYNC and we were seeing CPU utilization of 100% on WIN32 ( 2000, XP, 2003 ). I was a puzzled as I know Python was just listening to the OS select loop for socket events.
It turns out that Python internal C FrameLoop is fast, actually on my machine it processes 1,407,750 iterations per second. If you are doing anything inside a loop, it can (AND WILL!!!) quickly push CPU to 100%. The trick is to put a very small delay (10-200ms) into the loop to slow it down. With wait(.2) inserted into the server, the CPU went to < 1% CPU during base execution and the app performed identically. Even under heavy load (1000 messages per second), the server would reach 10% CPU at most.
Here is the Python app I wrote to test this assertion:
##########################################
import time
# time period
timePeriod = 3
t0 = time.time() + timePeriod
i=0
while time.time() <= t0 :
i = i+1
print( 'iterations/sec : ' +str( i / delay ) )
##########################################
Python is so fast, I had to slow it down. Never thought I would say that.
Cheers,
ted ;)
DIGG IT! 
Are you using the time.sleep() function, or some stackless/tasklet function?
BTW - that's pretty damn fast ;)
time.sleep(.01) works great although the argument is seconds not msecond and accuracy is a question. The actual sleep time can vary both shorter or longer than the passed second value.
In this case the smaller delay the better using sleep(.0001) makes sence.
From the docs:
time.sleep(secs)
Suspend execution for the given number of seconds. The argument may be a floating point number to indicate a more precise sleep time. The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal's catching routine. Also, the suspension time may be longer than requested by an arbitrary amount because of the scheduling of other activity in the system.
Cheers,
ted ;)