atomicshm
Access shared memory in Python with atomic operations, for cases where the other sharing party requires atomicity.
Python gives you shared memory but no way to touch it atomically. If another
process — C, Rust, Go, C++ — is running a lock-free protocol over those bytes,
memoryview assignment is not good enough: it is not atomic, it carries no
memory ordering, and the peer has no idea the GIL exists. This gives you the
handful of operations that are actually needed, and nothing else.
from multiprocessing.shared_memory import SharedMemory
import atomicshm
shm = SharedMemory(create=True, size=4096)
with atomicshm.AtomicView(shm.buf) as view:
view.store_u64(0, 0)
previous = view.fetch_add_u64(0, 1) # returns the value it replaced
if view.cas_u32(64, 0, 1) == 0: # compare-and-swap succeeded
...
- 8, 16, 32, and 64-bit load, store, exchange, compare-and-swap, and fetch-add/sub/and/or/xor.
- Explicit memory ordering — relaxed, acquire, release, acq_rel, seq_cst.
- 14–28 ns per operation, which is less than calling an empty Python function.
- No dependencies, no runtime configuration, ~1300 lines of C (mostly one macro expanded four times).
- One
abi3wheel per platform, working on CPython 3.11 and every version after.
Install
pip install atomicshm
Wheels are published for Linux (manylinux and musllinux, x86-64 and aarch64), macOS (Intel and Apple silicon), and Windows (x64 and ARM64). Anywhere else, the sdist builds with any C compiler and no other tooling.
The operations
Create an AtomicView over any writable, C-contiguous buffer — SharedMemory.buf,
an mmap, a bytearray, a numpy array. Then, for each width N in
8, 16, 32, 64:
| Method | Returns |
|---|---|
load_uN(offset, order=SEQ_CST) |
the value |
store_uN(offset, value, order=SEQ_CST) |
None |
exchange_uN(offset, value, order=SEQ_CST) |
the previous value |
cas_uN(offset, expected, desired, order=SEQ_CST, fail_order=…) |
the previous value |
fetch_add_uN / fetch_sub_uN / fetch_and_uN / fetch_or_uN / fetch_xor_uN (offset, value, order=SEQ_CST) |
the previous value |
cell_uN(offset) |
an AtomicUN bound to that offset |
Plus view.nbytes, view.address, view.closed, view.close(), and
atomicshm.fence(order).
Arithmetic wraps at the width. All arguments are positional-only.
cas returns the previous value, not a bool
That is what the hardware gives you, and it means a retry loop never needs a reload:
current = view.load_u64(off)
while (previous := view.cas_u64(off, current, current + 1)) != current:
current = previous
The swap succeeded if and only if the return value equals expected.
Cells, for hot fixed offsets
Control fields — a queue head, a lock word — live at a known offset. Binding one once moves the bounds and alignment checks out of the loop:
counter = view.cell_u64(0)
bump = counter.fetch_add # hoist the attribute lookup too
for _ in range(1_000_000):
bump(1)
Cells have the same operations without the offset argument and without the
width suffix: load, store, exchange, cas, fetch_add, …. A cell holds a
reference to its view, so the mapping stays alive as long as the cell does.
Values are unsigned coming out, either way going in
Arguments may be signed or unsigned — anything in [-2**(N-1), 2**N) — and are
stored as the low N bits. Results are always unsigned, because that is the one
interpretation that is always well defined. Wrapping arithmetic is identical for
both, so a signed counter only needs converting when you look at it:
atomicshm.as_signed(view.load_u32(0), 32) # 0xFFFFFFFF -> -1
Memory ordering
SEQ_CST by default: correct for any protocol, and the right thing to reach for
unless you have a specific reason not to. Weaker orders are available where they
matter:
| Operation | Accepts |
|---|---|
load |
RELAXED, ACQUIRE, SEQ_CST |
store |
RELAXED, RELEASE, SEQ_CST |
| everything else | all five |
Passing an order an operation cannot use — RELEASE to a load, say — raises
ValueError rather than being silently reinterpreted. cas takes a second,
optional failure order (RELAXED, ACQUIRE, or SEQ_CST), defaulting to the
success order with its release half removed.
On MSVC every operation carries a full barrier regardless of the order you ask for. Stronger than requested is always sound, and it keeps the x64/ARM64 differences out of the code entirely — see DESIGN.md.
Two things that will bite you
Alignment is required
An access at offset must be N/8-byte aligned. x86 would tolerate a misaligned
atomic; AArch64 will fault or silently stop being atomic. So misalignment raises
ValueError on every platform, including the ones that would have let you get
away with it locally. SharedMemory and mmap are page-aligned, so in practice
this only constrains how you lay out your struct.
The view holds the buffer exported
An AtomicView keeps its target's buffer exported for its whole life, so the
mapping cannot be unmapped out from under it. The flip side is that
SharedMemory.close() raises BufferError until the view lets go:
view = atomicshm.AtomicView(shm.buf)
...
view.close() # or use the view as a context manager
shm.close()
shm.unlink()
This is also what makes it safe to resolve an address once and reuse it. A view resolves its base pointer at construction and a cell resolves its slot address at creation; neither is re-derived per call. Three rules keep that sound:
- The export pins the memory. While a buffer is exported, its owner may not
move or free it —
bytearray.append,mmap.close, andmemoryview.releaseall raiseBufferErroruntil the view lets go. - The owner cannot be collected. A view holds a strong reference to its target and a cell holds one to its view, so nothing a cell depends on can be deallocated while the cell is alive — including under the cycle collector, which can only reclaim a view when the cells pointing at it are unreachable too.
- A view's base is write-once.
close()can clear it, nothing can re-point it, andAtomicView.__init__refuses a second call. So while a view is open, its base is the value every cell resolved against.
An address is therefore never used without first confirming, through an owned
reference, that the export is still live. The failure mode when a view is closed
is a ValueError, never a stale pointer.
Talking to a peer process
Lay the peer's struct out with natural alignment and address the fields by offset. Given:
struct control { // C
_Atomic uint64_t head; // offset 0
_Atomic uint64_t tail; // offset 8
_Atomic uint32_t lock; // offset 16
};
#[repr(C)] // Rust
struct Control {
head: AtomicU64, // offset 0
tail: AtomicU64, // offset 8
lock: AtomicU32, // offset 16
}
head = view.cell_u64(0) # Python
tail = view.cell_u64(8)
lock = view.cell_u32(16)
The orders map one-to-one onto C11's memory_order_* and Rust's
Ordering::*, and the operations onto atomic_fetch_add /
fetch_add, atomic_compare_exchange_strong / compare_exchange, and so on.
cas is always the strong form; there is no weak variant, because spurious
failure has no upside from Python.
A spinlock
lock = view.cell_u32(16)
def acquire():
while lock.cas(0, 1, atomicshm.ACQUIRE) != 0:
pass
def release():
lock.store(0, atomicshm.RELEASE)
A single-producer ring buffer index
head, tail = view.cell_u64(0), view.cell_u64(8)
def push(payload): # producer side
t = tail.load(atomicshm.RELAXED) # only we write it
if t - head.load(atomicshm.ACQUIRE) == CAPACITY:
return False
buf[slot(t)] = payload # publish the payload...
tail.store(t + 1, atomicshm.RELEASE) # ...then the index
return True
The release store is what makes the payload visible to the consumer before the index that points at it.
Performance
On a Linux x86-64 desktop, CPython 3.12 (python benchmarks/bench.py):
empty python function call 38.3 ns <- the floor for any Python call
AtomicView.load_u64 18.5 ns
AtomicView.fetch_add_u64 27.7 ns
AtomicView.cas_u64 24.2 ns
AtomicU64.load 14.0 ns
AtomicU64.fetch_add 24.5 ns
AtomicU64.cas 22.4 ns
Every operation costs less than calling an empty Python function, and most of
what is left is vectorcall dispatch rather than the atomic instruction — a
lock cmpxchg is a handful of nanoseconds. There is no PyArg_ParseTuple, no
tuple allocated for arguments, no Python frame pushed, and the GIL is never
released.
In throughput terms that is roughly 35–70 million operations per second from a single Python thread, loop overhead included. The practical consequence is that you can stop designing around the cost: a shared counter, a lock word, or a ring buffer index can be touched on the hot path without the access itself becoming the thing you have to justify.
What this is not
No mutexes, condition variables, or any blocking primitive; no futex /
WaitOnAddress parking; no 128-bit atomics; no weak compare-exchange; no
fetch_min/fetch_max; no atomic access to Python objects. The scope is the
complete set of operations needed to implement a lock-free protocol against a
peer process, and stopping there is what lets the library be finished.
If you need a lock, build it out of cas — the recipe above is the whole thing.
Compared with atomics
atomics solves the same problem and
covers more ground: it wraps the patomic
C library through CFFI, supports Python 3.6+, and offers a richer type model
(AtomicInt, AtomicUint, AtomicBytes, alignment introspection). It is good
software, and if you need Python 3.6–3.10 it is your option.
The difference that will decide it for most projects is cost at the call site. Same 64-bit slot, same mapping, Linux x86-64, CPython 3.12:
atomics 1.0.3 |
atomicshm |
||
|---|---|---|---|
load |
~2.7 µs | ~8 ns | ~340× |
store |
~2.8 µs | ~10 ns | ~280× |
fetch_add |
~4.6 µs | ~15 ns | ~310× |
| compare-and-swap | ~5.9 µs | ~17 ns | ~340× |
A gap that size deserves an explanation rather than a benchmark table, and it
has a simple one. atomics makes 65 Python function calls per load, 114 per
fetch_add, and 142 per compare-and-swap. This library makes none. Profiling
one load shows _released twelve times, _assert_not_released eight times,
address three times, release three times, plus cffi.cast and
from_buffer — every call re-acquires the buffer, re-derives the pointer
through CFFI, and re-validates. Multiply those call counts by the ~38 ns an
empty Python call costs and you predict 2.5 / 4.4 / 5.4 µs against 2.8 / 4.6 /
5.9 µs measured. The whole gap is Python call overhead. Neither library is
spending meaningful time on the atomic instruction.
atomicshm resolves the address once, at AtomicView construction and
again at cell_uN(), and then does nothing per call but a bounds check, an
alignment check, and the instruction. It can cache that pointer safely for
exactly the reason described in the export note above:
holding the buffer exported is what guarantees the mapping cannot move or
vanish. The safety property and the speed are the same mechanism.
This matters because latency is usually the entire reason to reach for shared memory. At microseconds per operation, atomic access is something you budget for, ration, and design around — batching to amortise it, or accepting it and justifying the cost. At tens of nanoseconds it stops being a design constraint. A million compare-and-swaps is ~17 ms rather than ~6 seconds.
The second difference is the license: atomics is GPL-3.0, this is MIT.
These are single hardware instructions with an argument check in front of them,
and a copyleft obligation across an entire application is a steep price for
lock xadd. Worth noting that patomic itself is LGPL-3.0-or-later with a
linking exception — the copyleft is a choice made at the Python wrapper layer,
not inherited from the atomics implementation. atomicshm also has no runtime
dependency at all, where atomics requires cffi.
The two do interoperate: both perform genuine hardware atomics on the same bytes, so a process using one and a process using the other coordinate correctly.
Measured with timeit, best of 5 runs of 20,000 iterations, bound methods
hoisted out of the loop for both; call counts from cProfile. No comparison
script ships here — running one would mean importing a GPL library from an MIT
package, which is one of the things this library exists to avoid.
Provenance
atomicshm was written from the GCC/Clang and MSVC intrinsic documentation and
the CPython C API. No source from atomics or patomic was read, copied, or
adapted, and the API here was designed and fully implemented before either was
known to be relevant.
Requirements
CPython 3.11+ on a 64-bit platform. Free-threaded builds are supported and do not re-enable the GIL. The build fails rather than produce a binary whose "atomics" are a process-private lock, which would be silently useless across processes.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atomicshm-0.1.0.tar.gz.
File metadata
- Download URL: atomicshm-0.1.0.tar.gz
- Upload date:
- Size: 48.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
130c406a69eec499aa70321795a377a3dbc0607a5bcb1b1a6a82f3e9f3a5d8b0
|
|
| MD5 |
030771444d3f8855a015be55bdf4233b
|
|
| BLAKE2b-256 |
db64e45e352b2541a9edf4befe6425825e8d1b896fac34acc4f0df22e22e0f63
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0.tar.gz:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0.tar.gz -
Subject digest:
130c406a69eec499aa70321795a377a3dbc0607a5bcb1b1a6a82f3e9f3a5d8b0 - Sigstore transparency entry: 2596953779
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-win_arm64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-win_arm64.whl
- Upload date:
- Size: 27.2 kB
- Tags: CPython 3.14t, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac09df2c45eaaa1d6ef38a2e072afb754b9ef039220d1e48657fa8a1ab96ccfb
|
|
| MD5 |
0b861651202ed5559086a5ef198b11e5
|
|
| BLAKE2b-256 |
fd6eb5029140c2591d65c0a91785dd0bdfaa8fcb7589fc374990af173da6a175
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-win_arm64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-win_arm64.whl -
Subject digest:
ac09df2c45eaaa1d6ef38a2e072afb754b9ef039220d1e48657fa8a1ab96ccfb - Sigstore transparency entry: 2596953873
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-win_amd64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-win_amd64.whl
- Upload date:
- Size: 32.8 kB
- Tags: CPython 3.14t, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af45cfbf87e653d514fd0b371cd97be41f8d0e063b1ae1d050e4357b7ff69483
|
|
| MD5 |
1f8ebdb8c31e30c0aa928d5d184e1b97
|
|
| BLAKE2b-256 |
86684c1e512bec8607809a1a82b6eebf77b224ee4d4d7894b6ad886b2300e77d
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-win_amd64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-win_amd64.whl -
Subject digest:
af45cfbf87e653d514fd0b371cd97be41f8d0e063b1ae1d050e4357b7ff69483 - Sigstore transparency entry: 2596954027
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 150.7 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78ecfd0f1ca7ba4e32d2d87f394b158aaaa725f56de71e4375268bd89902e150
|
|
| MD5 |
cd21b12373fa45d70b762af6c7b4d410
|
|
| BLAKE2b-256 |
5ea782c1ef30316e4fcc15aea3f5f11579b27268c3e7f83cda0cf6bc5357f02f
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl -
Subject digest:
78ecfd0f1ca7ba4e32d2d87f394b158aaaa725f56de71e4375268bd89902e150 - Sigstore transparency entry: 2596954098
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 155.6 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
173e5024a9e0292d80674b5519dcd215e9681e040192a16541df05301362d16d
|
|
| MD5 |
422b06738c14de2fae0c9779a237d84e
|
|
| BLAKE2b-256 |
807f2f046731ea0716a6fb53af3cdf1bfff9189d57ce443b18ef9d2e4321796c
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl -
Subject digest:
173e5024a9e0292d80674b5519dcd215e9681e040192a16541df05301362d16d - Sigstore transparency entry: 2596953935
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 158.6 kB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff95e229a9699b183b70d62af3b1176dab3af3365444159928016286f68bcee6
|
|
| MD5 |
937ff0502ce0d16a1879e1006dbd254e
|
|
| BLAKE2b-256 |
d3bd032540627af7d9f1ade34bac586e4f7125460cf3ba199b5a91d66ec4e562
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
ff95e229a9699b183b70d62af3b1176dab3af3365444159928016286f68bcee6 - Sigstore transparency entry: 2596954057
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 153.7 kB
- Tags: CPython 3.14t, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b87f94aacf65b1da97bfa6223a6140b814e1cbb6fc4802c1ab5d6263a66c367c
|
|
| MD5 |
2daacc5c7c480a9ba8f32a986c418a22
|
|
| BLAKE2b-256 |
f4b9cdfa17181f5d80a5fef930787998d9c65adf4bb03010fbe519a2f304e8bd
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl -
Subject digest:
b87f94aacf65b1da97bfa6223a6140b814e1cbb6fc4802c1ab5d6263a66c367c - Sigstore transparency entry: 2596954160
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl
- Upload date:
- Size: 31.3 kB
- Tags: CPython 3.14t, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93932da4ba8a8c687fd25c75b5f00486488871f95a5490cd37ad3f847538f0bb
|
|
| MD5 |
6f307a8bdf06ca6c0cfb9d8faa30513a
|
|
| BLAKE2b-256 |
7c3a2e8bb0ce2a7cf9ec36c7840d7f1cee3c396eb02bbb7439ee013fbb14ca03
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl -
Subject digest:
93932da4ba8a8c687fd25c75b5f00486488871f95a5490cd37ad3f847538f0bb - Sigstore transparency entry: 2596954002
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl
- Upload date:
- Size: 34.4 kB
- Tags: CPython 3.14t, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f20f378f4c2b2e41ff28d6750f773b71d0a095983350fa3f48bfab92de72c7e
|
|
| MD5 |
cd9fc8ca697ac74abad42c682fa6ec35
|
|
| BLAKE2b-256 |
b039a81f3cb343be8b9de628699c9e8f2800f835f5d0b5427f5252c3ef1e7a80
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl -
Subject digest:
7f20f378f4c2b2e41ff28d6750f773b71d0a095983350fa3f48bfab92de72c7e - Sigstore transparency entry: 2596953974
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-win_arm64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-win_arm64.whl
- Upload date:
- Size: 26.3 kB
- Tags: CPython 3.11+, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edbab6e00edb941bff02202b7f8a45496dfdf351c7fbdc35d755c54250b76cf9
|
|
| MD5 |
f46608e35666e3bfb9d5d247965dba1c
|
|
| BLAKE2b-256 |
05dce23abfb67dbb96420dacc97e37e68cade9876d022f6ddf9e59ba4fa2ddb4
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-win_arm64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-win_arm64.whl -
Subject digest:
edbab6e00edb941bff02202b7f8a45496dfdf351c7fbdc35d755c54250b76cf9 - Sigstore transparency entry: 2596953849
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-win_amd64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-win_amd64.whl
- Upload date:
- Size: 32.1 kB
- Tags: CPython 3.11+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
586b9a46d42d927833af58c15df0e751ce2ada8133325551f6d01c2b05990c84
|
|
| MD5 |
a8ffcd16cd92f73bace208e576de0676
|
|
| BLAKE2b-256 |
5d49d61e92f3600f9147d6c803bc50e10648f9c4bc0b0b43bbd9f098b64ff044
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-win_amd64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-win_amd64.whl -
Subject digest:
586b9a46d42d927833af58c15df0e751ce2ada8133325551f6d01c2b05990c84 - Sigstore transparency entry: 2596953955
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 147.4 kB
- Tags: CPython 3.11+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c48f4ddc243b5e82d43b480498eb20ab6e71a227780542e24265db268c70c8f2
|
|
| MD5 |
f30e3ba09f6c87605896cc340057a898
|
|
| BLAKE2b-256 |
cc6bd36d4e7a48be888d842804275d430827269e14d73dee4dcb90d2641f21b9
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl -
Subject digest:
c48f4ddc243b5e82d43b480498eb20ab6e71a227780542e24265db268c70c8f2 - Sigstore transparency entry: 2596953910
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 152.6 kB
- Tags: CPython 3.11+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7271094acfab21bc4148177149e03bdc8072abc1c92b6c0a948827f97617b3d1
|
|
| MD5 |
a056e5f19439c27eb91ddb24345dd106
|
|
| BLAKE2b-256 |
2c0c131f3e8a8be835ea24b13528ab38b03bb4c3beed3933817b2031a9354041
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl -
Subject digest:
7271094acfab21bc4148177149e03bdc8072abc1c92b6c0a948827f97617b3d1 - Sigstore transparency entry: 2596954220
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 155.2 kB
- Tags: CPython 3.11+, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9a6cdf311632f0ce66c5aa43d4e2b31ccef014f77af3d36c63f72dd7067dcae
|
|
| MD5 |
6d1ad1995a26cfb6040cf8aa5d295d1e
|
|
| BLAKE2b-256 |
33aa1fe9889abc3611b1e77988d61604d36bd3b836b018b23f9e3f8c9d853aa8
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
a9a6cdf311632f0ce66c5aa43d4e2b31ccef014f77af3d36c63f72dd7067dcae - Sigstore transparency entry: 2596953833
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 150.1 kB
- Tags: CPython 3.11+, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2f23b63cc712f762a66e16be1df2a1ada72954aaf39b06622593976f1701314
|
|
| MD5 |
5fdab48da1b0a1021a4cafef21cca4a2
|
|
| BLAKE2b-256 |
cbec54c218c9e9f6a0ca6fddd4f796678b2767595fbc6f97739c16cf3afb1f11
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl -
Subject digest:
d2f23b63cc712f762a66e16be1df2a1ada72954aaf39b06622593976f1701314 - Sigstore transparency entry: 2596953891
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 31.0 kB
- Tags: CPython 3.11+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
029c6c84a533ea7860d027d8070342ce8f342b0f391536a2087fece0b5ffb676
|
|
| MD5 |
cfeb92d0c5a7ffae6f62b7a3f2f513da
|
|
| BLAKE2b-256 |
ba6fd2e214ed27760a2d8722d730b36cc2dbcffc323b1a20f92906585e476193
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl -
Subject digest:
029c6c84a533ea7860d027d8070342ce8f342b0f391536a2087fece0b5ffb676 - Sigstore transparency entry: 2596954267
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type:
File details
Details for the file atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl.
File metadata
- Download URL: atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl
- Upload date:
- Size: 34.0 kB
- Tags: CPython 3.11+, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2fee6ba68be6438fa50243337563fee5bb445be72f1d3e1627c338c37ea56ba
|
|
| MD5 |
67657a5d26eccce9a79632c0f1a27ee9
|
|
| BLAKE2b-256 |
f5fcdf298d6fcf07539f19ecda8f52b07e9f9cebb49df09db167409f69812948
|
Provenance
The following attestation bundles were made for atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl:
Publisher:
release.yml on Ichoran/py-atomic-shared-mem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl -
Subject digest:
a2fee6ba68be6438fa50243337563fee5bb445be72f1d3e1627c338c37ea56ba - Sigstore transparency entry: 2596953807
- Sigstore integration time:
-
Permalink:
Ichoran/py-atomic-shared-mem@d5533060245d8cdb3d63115926fddc4a3c46821e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Ichoran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d5533060245d8cdb3d63115926fddc4a3c46821e -
Trigger Event:
push
-
Statement type: