Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-21302: Add Waitable timer implementation for time.sleep() in Windows #28341

Closed
wants to merge 59 commits into from

Conversation

@Livius90
Copy link
Contributor

@Livius90 Livius90 commented Sep 14, 2021

  • Add Waitable timer object to time.sleep() in Windows operation system.

Some previous pull request history can be found here: #28111

https://bugs.python.org/issue21302

Livius90 and others added 30 commits Sep 1, 2021
clock_nanosleep() is available in Linux which has POSIX 2001.12 or newer
PEP 7 rules appled for _PyTime_AsTimespec and _PyTime_AsTimeval error checking in pysleep().
In calling clock_nanosleep() EINTR is not stored in errno. Need to use return value of clock_nanosleep()/select() for checking it.
Unix operating systems eg: Linux, macOS, FreeBSD etc. time.sleep() has a resolution of nanoseconds with using clock_nanosleep() or nanosleep() function.
In all Unix systems eg: macOS, FreeBSD, Linux etc, nanosleep() is available.
Waitable timer is 100 nsec resolution. Now, seconds to nanosec conversion is limited in usec, soon will come the next developing part to improve it in next commit.
Waitable timer resolution is 100 nsec but it is limited to 1 usec by round ceiling, moreover sleep for lower then 1 milisec is not possible in Win32 API.
suggested description

Co-authored-by: Victor Stinner <vstinner@python.org>
Modules/timemodule.c Outdated Show resolved Hide resolved
Modules/timemodule.c Outdated Show resolved Hide resolved
Modules/timemodule.c Show resolved Hide resolved
Modules/timemodule.c Outdated Show resolved Hide resolved
@Livius90 Livius90 requested a review from vstinner Sep 16, 2021
Modules/timemodule.c Outdated Show resolved Hide resolved
@Livius90 Livius90 requested a review from vstinner Sep 16, 2021
Modules/timemodule.c Outdated Show resolved Hide resolved
Modules/timemodule.c Outdated Show resolved Hide resolved
Modules/timemodule.c Outdated Show resolved Hide resolved
Modules/timemodule.c Outdated Show resolved Hide resolved
Modules/timemodule.c Show resolved Hide resolved
@Livius90 Livius90 requested a review from vstinner Sep 20, 2021
@Livius90
Copy link
Contributor Author

@Livius90 Livius90 commented Sep 20, 2021

Address sanitizer test failed again randomly, @vstinner can you re-run it somehow?

@vstinner
Copy link
Member

@vstinner vstinner commented Sep 20, 2021

Address sanitizer test failed again randomly, @vstinner can you re-run it somehow?

That's the https://bugs.python.org/issue45200 issue.

@vstinner
Copy link
Member

@vstinner vstinner commented Sep 20, 2021

I wrote a different implementation based on this PR, please see my PR #28483.

@vstinner
Copy link
Member

@vstinner vstinner commented Sep 22, 2021

Thanks @Livius90. I merged my PR which is based on yours but also enhance the documentation, contains a bugfix for SIGINT, and has a different implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants