| 161 | |
| 162 | |
| 163 | def _contention(root: Path) -> list[Sample]: |
| 164 | samples: list[Sample] = [] |
| 165 | for name, path in (("FileLock", root / "c-file.lock"), ("StrictSoftFileLock", root / "c-strict.lock")): |
| 166 | started = time.perf_counter() |
| 167 | workers = [Process(target=_hammer, args=(name, str(path))) for _ in range(_CONTENTION_PROCESSES)] |
| 168 | for worker in workers: |
| 169 | worker.start() |
| 170 | for worker in workers: |
| 171 | worker.join() |
| 172 | elapsed = time.perf_counter() - started |
| 173 | total = _CONTENTION_PROCESSES * _CONTENTION_ACQUISITIONS |
| 174 | per = elapsed * 1e3 / total |
| 175 | samples.append(Sample(f"contention {name} ({total} acquisitions)", per, per, "ms/acq")) |
| 176 | return samples |
| 177 | |
| 178 | |
| 179 | def _hammer(backend: str, path: str) -> None: |