I've not noticed that sleep times are significantly inaccurate. Realise though, that they aren't supposed to be accurate since all they are guaranteeing is that they will wait for at least N seconds, resuming on the following frame. Because frames occur at absolute times which are unlikely to correspond exactly with the time you desire the script to resume, each sleep's delay, regardless of requested delay size, will be 0 to (1 / FPS) seconds longer than the time requested.
Of course, this doesn't explain why you are getting 2.5 seconds delay for "sleep 1" (I'd expect it to be an actual delay of 1 to 1.05 seconds, assuming a minimum of 20 FPS). I don't know what you are using to test that sleep delays are not correct, but if you are doing "sleep 0.01" 100 times then you will definitely be getting a lot more than a one-second delay, since each sleep will in fact be waiting (1 / FPS) seconds which will likely be a lot longer than the requested 0.01 seconds.