|Recipients||brian.curtin, jnoller, kevinwatters, lemburg, nascheme, pitrou, rcohen, schmir|
|Marked as misclassified||No|
Ross Cohen wrote: > > Ross Cohen <firstname.lastname@example.org> added the comment: > > On Fri, 22 Jan 2010 09:32:36 +0000 > Marc-Andre Lemburg <email@example.com> wrote: > >> * Please add the fallback solutions from the time module in case gettimeofday() is not available. You cannot assume that "all modern POSIX systems" implement that API - it was introduced in POSIX 2001 and Python 2.x still supports OSes that were released prior to that year. > > POSIX as a standard tends to follow, not lead. The gettimeofday() call > dates back over 20 years in BSD. time.time() falls back on ftime() and > then time(). ftime() was added to the POSIX spec at the same time as > gettimeofday() and is now deprecated. time() probably doesn't have > enough resolution. > > I'd have to be pointed to a specific platform which doesn't support > gettimeofday() but which is supported by python. Otherwise, I'd be > coding blind. The point here is that we have traditionally been careful not to break Python for platforms that don't support a certain API, hence the different fallback solutions for getting the current time. gettimeofday() is indeed available on most OSes, but not all. VxWorks is an example where it is not available and Python happily uses alternatives. http://www.gsalcazar.altervista.org/tools/how-to-port-python-to-vxworks/?PHPSESSID=u5do9v0lh2gqdqilmikv7nmsk1 There are also cases where gettimeofday() is buggy (e.g. on Solaris: http://www.unix.com/sun-solaris/59187-bugs-clock.html or Cygwin: http://old.nabble.com/About-The---GetMicroSecondTime-on-Windows---Post-td13721510.html) or returns errors every now and then (I have observed that in mxDateTime occasionally - it may be related to NTP doing its works). For those situations is necessary to be able to enable a fallback solution using other APIs. I've also done some extra research yesterday and found that e.g. Ruby is using gettimeofday() for thread scheduling as well. They have observed issues with gettimeofday() causing problems due to wallclock time not being a monotonic (e.g. due to NTP running on the machine and the clock sometimes going backwards due to corrections or DST changes). http://groups.google.com/group/ruby-talk-google/browse_thread/thread/f8a616113e2eea8f OTOH, using process timers is also not regarded as being ideal, since on SMP systems, each CPU will have its own timer and they are not necessarily in sync. Other implementations tend to use the new clock_gettime() APIs where available and then use the CLOCK_MONOTONIC timer, e.g. http://stackoverflow.com/questions/88/is-gettimeofday-guaranteed-to-be-of-microsecond-resolution http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=272 Here's some example code which tries to cover even more platforms than Python 2.x: http://www.koders.com/c/fid5A75B2B62D4024A2431D060ADD5D378DB7A1D2BD.aspx Another aspect to consider is update frequency of these APIs. gettimeofday()'s resolution depends on various factors and appears to vary between 1us and 100ms (on systems running using a 100Hz clock). http://answers.google.com/answers/threadview/id/203397.html http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=272 https://computing.llnl.gov/tutorials/performance_tools/#gettimeofday clock_gettime() has similar resolution, but tends to be updated more often: http://forums13.itrc.hp.com/service/forums/questionanswer.do?admit=109447627+1264587819627+28353475&threadId=1230881 And finally, using wallclock time for these things is expensive as I've already mentioned: http://groups.google.com/group/comp.os.linux.development.apps/browse_frm/thread/dc29071f2417f75f/c46264dba0863463?lnk=st&rnum=1#c46264dba0863463 http://www.developerweb.net/forum/archive/index.php/t-4368.html http://h21007.www2.hp.com/portal/download/files/unprot/hpux/HowToTellTheTime.pdf (as HTML: http://22.214.171.124/search?q=cache%3AI1ihHYBMJvgJ%3Ah21007.www2.hp.com%2Fportal%2Fdownload%2Ffiles%2Funprot%2Fhpux%2FHowToTellTheTime.pdf+gettimeofday()+support+across+platforms&hl=en&gl=de) It appears to be better to use clock_gettime(CLOCK_MONOTONIC) where available and only use gettimeofday() as fallback solution together with times(), ftime() and time().
|2010-01-27 10:33:50||lemburg||set||recipients: + lemburg, nascheme, pitrou, schmir, kevinwatters, jnoller, brian.curtin, rcohen|
|2010-01-27 10:33:45||lemburg||link||issue7753 messages|