python / cpython

The Python programming language
https://www.python.org
Other
63.54k stars 30.44k forks source link

Clearer wording of os.WNOHANG documentation to avoid misinterpretation #82983

Open d5a0fa13-3b5a-4efb-a5aa-42598140aeed opened 5 years ago

d5a0fa13-3b5a-4efb-a5aa-42598140aeed commented 5 years ago
BPO 38802
Nosy @iritkatriel

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields: ```python assignee = None closed_at = None created_at = labels = ['3.7', '3.8', '3.9', 'type-feature', 'library', 'docs'] title = 'Clearer wording of os.WNOHANG documentation to avoid misinterpretation' updated_at = user = 'https://bugs.python.org/bbmmy' ``` bugs.python.org fields: ```python activity = actor = 'iritkatriel' assignee = 'docs@python' closed = False closed_date = None closer = None components = ['Documentation', 'Library (Lib)'] creation = creator = 'bbmmy' dependencies = [] files = [] hgrepos = [] issue_num = 38802 keywords = [] message_count = 3.0 messages = ['356627', '356628', '396517'] nosy_count = 3.0 nosy_names = ['docs@python', 'bbmmy', 'iritkatriel'] pr_nums = [] priority = 'normal' resolution = None stage = None status = 'open' superseder = None type = 'enhancement' url = 'https://bugs.python.org/issue38802' versions = ['Python 2.7', 'Python 3.5', 'Python 3.6', 'Python 3.7', 'Python 3.8', 'Python 3.9'] ```

d5a0fa13-3b5a-4efb-a5aa-42598140aeed commented 5 years ago

For versions 2.7 through 3.9 of https://docs.python.org/3/library/os.html, os.WNOHANG is described as returning (0, 0) when no child process status is immediately available.

However, both os.wait3() and os.wait4() return 3-element tuples and are described as being similar to os.waitpid(). This, combined with the os.WNOHANG documentation being somewhat open to interpretation, makes it very easy to conclude (incorrectly) that wait3(WNOHANG) and wait4(WNOHANG) would return (0, 0) when no child process status is immediately available. In fact, they would return a 3-element tuple with the first 2 elements being 0.

I suggest rephrasing the os.WNOHANG documentation to the following (or something similar):

"The option for waitpid() to return immediately if no child process status is available immediately, in which case the function returns (0, 0). Correspondingly, wait3() and wait4() would return 3-element tuples with the first 2 elements being 0 and the last being a default-constructed resource usage information object."

Unfortunately that last part about the default-constructed resource usage information object is only true after this recent bug fix: https://github.com/python/cpython/pull/15111/files

So I'll leave it to y'all to decide how to update the documentation since my proposed phrasing is dependent on that bug fix.

d5a0fa13-3b5a-4efb-a5aa-42598140aeed commented 5 years ago

If this documentation fix will not be backported (i.e. it will only apply to versions *after* the aforementioned bug fix) then a more precise way to phrase that last part would be:

"...with the first 2 elements being 0 and the last being an all-zero resource usage information object."

iritkatriel commented 3 years ago

see also bpo-41825, bpo-34278, bpo-27808.