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

gh-94182: run the PidfdChildWatcher on the running loop #94184

Merged

Conversation

graingert
Copy link
Contributor

@graingert graingert commented Jun 23, 2022

@@ -712,7 +712,7 @@ def setUp(self):
self.set_event_loop(self.loop)


class GenericWatcherTests:
class GenericWatcherTests(test_utils.TestCase):
Copy link
Contributor Author

@graingert graingert Jun 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this test wasn't enabled?

Copy link
Contributor Author

@graingert graingert Jul 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I split this fix out, so this PR is easier to review: #95009


async def execute():
watcher = mock.create_authspec(asyncio.AbstractChildWatcher)
watcher.is_active.return_value = False
Copy link
Contributor Author

@graingert graingert Jun 24, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was patching the wrong attribute - asyncio calls asyncio.get_child_watcher().__enter__().is_active()

graingert and others added 2 commits Jun 24, 2022
otherwise it invalidates test_create_subprocess_with_pidfd
@graingert graingert marked this pull request as ready for review Jun 24, 2022
@graingert graingert requested review from 1st1 and asvetlov as code owners Jun 24, 2022
@graingert
Copy link
Contributor Author

graingert commented Jul 6, 2022

@asvetlov can I get a review on this please?

@gvanrossum gvanrossum self-requested a review as a code owner Oct 7, 2022
Copy link
Member

@gvanrossum gvanrossum left a comment

LGTM. We'll probably merge this ASAP.

@@ -30,6 +31,19 @@
'sys.stdout.buffer.write(data)'))]


@functools.cache
def _has_pidfd_support():
Copy link
Member

@gvanrossum gvanrossum Oct 7, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This same function is also introduced by @kumaraditya303's PR GH-98024 (which uses PidfdChildWatcher when supported). I propose to refactor things so that everything uses Kumar's version. We can do that in Kumar's PR once this PR is merged.

def _do_wait(self, pid):
pidfd, callback, args = self._callbacks.pop(pid)
self._loop._remove_reader(pidfd)
def _do_wait(self, pid, pidfd, callback, args):
Copy link
Member

@gvanrossum gvanrossum Oct 7, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious why we can't pass the loop as an argument as well? (Though maybe that creates an unhealthy self-reference to the loop.)

@gvanrossum
Copy link
Member

gvanrossum commented Oct 7, 2022

(Waiting for @1st1 review and passing tests.)

1st1
1st1 approved these changes Oct 7, 2022
@gvanrossum
Copy link
Member

gvanrossum commented Oct 7, 2022

Not sure what's wrong with the docs build.

@1st1
Copy link
Member

1st1 commented Oct 7, 2022

Not sure what's wrong with the docs build.

I've fixed it.

@1st1
Copy link
Member

1st1 commented Oct 7, 2022

I've fixed it.

Reverted the "fix" because apparently it was caused by an unrelated commit in main.

@JelleZijlstra JelleZijlstra self-assigned this Oct 7, 2022
@JelleZijlstra
Copy link
Member

JelleZijlstra commented Oct 7, 2022

I can take care of getting CI green and hitting the merge button here.

@1st1
Copy link
Member

1st1 commented Oct 7, 2022

I can take care of getting CI green and hitting the merge button here.

Please do. You might need to rebase this PR to the latest main.

@gvanrossum
Copy link
Member

gvanrossum commented Oct 8, 2022

The macOS build hit some GitHub Actions limit. I'm going to merge without waiting for it.

@gvanrossum gvanrossum merged commit 3d8b224 into python:main Oct 8, 2022
15 checks passed
carljm added a commit to carljm/cpython that referenced this pull request Oct 8, 2022
* main:
  pythongh-68686: Retire eptag ptag scripts (python#98064)
  pythongh-97922: Run the GC only on eval breaker (python#97920)
  GitHub Workflows security hardening (python#96492)
  Add `@ezio-melotti` as codeowner for `.github/`. (python#98079)
  pythongh-97913 Docs: Add walrus operator to the index (python#97921)
  [doc] Fix broken links to C extensions accelerating stdlib modules (python#96914)
  pythongh-97822: Fix http.server documentation reference to test() function (python#98027)
  pythongh-91052: Add PyDict_Unwatch for unwatching a dictionary (python#98055)
  pythonGH-98023: Change default child watcher to PidfdChildWatcher on supported systems (python#98024)
  pythonGH-94182: Run the PidfdChildWatcher on the running loop (python#94184)
carljm added a commit to carljm/cpython that referenced this pull request Oct 9, 2022
* main: (5519 commits)
  Minor edits to the Descriptor HowTo Guide (pythonGH-24901)
  Fix link to Lifecycle of a Pull Request in CONTRIBUTING (python#98102)
  pythonGH-94597: deprecate `SafeChildWatcher`, `FastChildWatcher` and `MultiLoopChildWatcher` child watchers  (python#98089)
  Auto-cancel old builds when new commit pushed to branch (python#98009)
  pythongh-95011: Migrate syslog module to Argument Clinic (pythonGH-95012)
  pythongh-68686: Retire eptag ptag scripts (python#98064)
  pythongh-97922: Run the GC only on eval breaker (python#97920)
  GitHub Workflows security hardening (python#96492)
  Add `@ezio-melotti` as codeowner for `.github/`. (python#98079)
  pythongh-97913 Docs: Add walrus operator to the index (python#97921)
  [doc] Fix broken links to C extensions accelerating stdlib modules (python#96914)
  pythongh-97822: Fix http.server documentation reference to test() function (python#98027)
  pythongh-91052: Add PyDict_Unwatch for unwatching a dictionary (python#98055)
  pythonGH-98023: Change default child watcher to PidfdChildWatcher on supported systems (python#98024)
  pythonGH-94182: Run the PidfdChildWatcher on the running loop (python#94184)
  pythongh-92886: make test_ast pass with -O (assertions off) (pythonGH-98058)
  pythongh-92886: make test_coroutines pass with -O (assertions off) (pythonGH-98060)
  pythongh-57179: Add note on symlinks for os.walk (python#94799)
  pythongh-94808: Fix regex on exotic platforms (python#98036)
  pythongh-90085: Remove vestigial -t and -c timeit options (python#94941)
  ...
mpage pushed a commit to mpage/cpython that referenced this pull request Oct 11, 2022
…#94184)

There is no reason for this watcher to be attached to any particular loop.
This should make it safe to use regardless of the lifetime of the event loop running in the main thread
(relative to other loops).

Co-authored-by: Yury Selivanov <yury@edgedb.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants