• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

karellen / geventmp / 17340928350

30 Aug 2025 07:15AM UTC coverage: 77.889% (+2.4%) from 75.467%
17340928350

push

github

web-flow
Merge pull request #32 from karellen/geventmp_forkserver

Instrument Multiprocessing forkserver

38 of 71 branches covered (53.52%)

Branch coverage included in aggregate %.

44 of 69 new or added lines in 5 files covered. (63.77%)

21 existing lines in 2 files now uncovered.

272 of 327 relevant lines covered (83.18%)

12.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.91
/src/main/python/geventmp/_mp/3/_mp_resource_tracker.py
1
#   -*- coding: utf-8 -*-
2
#   Copyright 2020 Karellen, Inc. and contributors
3
#
4
#   Licensed under the Apache License, Version 2.0 (the "License");
5
#   you may not use this file except in compliance with the License.
6
#   You may obtain a copy of the License at
7
#
8
#       http://www.apache.org/licenses/LICENSE-2.0
9
#
10
#   Unless required by applicable law or agreed to in writing, software
11
#   distributed under the License is distributed on an "AS IS" BASIS,
12
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
#   See the License for the specific language governing permissions and
14
#   limitations under the License.
15

16
from multiprocessing.resource_tracker import ResourceTracker as _ResourceTracker
18✔
17

18
from gevent.os import make_nonblocking, nb_write
18✔
19

20
__implements__ = ["ResourceTracker", "_resource_tracker", "ensure_running",
18✔
21
                  "register", "unregister", "getfd"]
22
__target__ = "multiprocessing.resource_tracker"
18✔
23

24

25
class ResourceTracker(_ResourceTracker):
18✔
26
    def ensure_running(self):
18✔
27
        super().ensure_running()
18✔
28
        make_nonblocking(self._fd)
18✔
29

30
    def _send(self, cmd, name, rtype):
18✔
UNCOV
31
        self.ensure_running()
8✔
UNCOV
32
        msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii')
8✔
UNCOV
33
        if len(name) > 512:
8!
34
            # posix guarantees that writes to a pipe of less than PIPE_BUF
35
            # bytes are atomic, and that PIPE_BUF >= 512
36
            raise ValueError('name too long')
×
UNCOV
37
        nbytes = nb_write(self._fd, msg)
8✔
UNCOV
38
        assert nbytes == len(msg), "nbytes {0:n} but len(msg) {1:n}".format(
8✔
39
            nbytes, len(msg))
40

41

42
_resource_tracker = ResourceTracker()
18✔
43
ensure_running = _resource_tracker.ensure_running
18✔
44
register = _resource_tracker.register
18✔
45
unregister = _resource_tracker.unregister
18✔
46
getfd = _resource_tracker.getfd
18✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc