(self, name=None, create=False, size=0, *, track=True)
| 74 | _track = True |
| 75 | |
| 76 | def __init__(self, name=None, create=False, size=0, *, track=True): |
| 77 | if not size >= 0: |
| 78 | raise ValueError("'size' must be a positive integer") |
| 79 | if create: |
| 80 | self._flags = _O_CREX | os.O_RDWR |
| 81 | if size == 0: |
| 82 | raise ValueError("'size' must be a positive number different from zero") |
| 83 | if name is None and not self._flags & os.O_EXCL: |
| 84 | raise ValueError("'name' can only be None if create=True") |
| 85 | |
| 86 | self._track = track |
| 87 | if _USE_POSIX: |
| 88 | |
| 89 | # POSIX Shared Memory |
| 90 | |
| 91 | if name is None: |
| 92 | while True: |
| 93 | name = _make_filename() |
| 94 | try: |
| 95 | self._fd = _posixshmem.shm_open( |
| 96 | name, |
| 97 | self._flags, |
| 98 | mode=self._mode |
| 99 | ) |
| 100 | except FileExistsError: |
| 101 | continue |
| 102 | self._name = name |
| 103 | break |
| 104 | else: |
| 105 | name = "/" + name if self._prepend_leading_slash else name |
| 106 | self._fd = _posixshmem.shm_open( |
| 107 | name, |
| 108 | self._flags, |
| 109 | mode=self._mode |
| 110 | ) |
| 111 | self._name = name |
| 112 | try: |
| 113 | if create and size: |
| 114 | os.ftruncate(self._fd, size) |
| 115 | stats = os.fstat(self._fd) |
| 116 | size = stats.st_size |
| 117 | self._mmap = mmap.mmap(self._fd, size) |
| 118 | except OSError: |
| 119 | self.unlink() |
| 120 | raise |
| 121 | if self._track: |
| 122 | resource_tracker.register(self._name, "shared_memory") |
| 123 | |
| 124 | else: |
| 125 | |
| 126 | # Windows Named Shared Memory |
| 127 | |
| 128 | if create: |
| 129 | while True: |
| 130 | temp_name = _make_filename() if name is None else name |
| 131 | # Create and reserve shared memory block with this name |
| 132 | # until it can be attached to by mmap. |
| 133 | h_map = _winapi.CreateFileMapping( |
nothing calls this directly
no test coverage detected