Skip to main content

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 abi3 wheel 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, and memoryview.release all raise BufferError until 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, and AtomicView.__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

atomicshm-0.1.0.tar.gz (48.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

atomicshm-0.1.0-cp314-cp314t-win_arm64.whl (27.2 kB view details)

Uploaded CPython 3.14tWindows ARM64

atomicshm-0.1.0-cp314-cp314t-win_amd64.whl (32.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl (150.7 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl (155.6 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

atomicshm-0.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (158.6 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

atomicshm-0.1.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (153.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl (31.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl (34.4 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

atomicshm-0.1.0-cp311-abi3-win_arm64.whl (26.3 kB view details)

Uploaded CPython 3.11+Windows ARM64

atomicshm-0.1.0-cp311-abi3-win_amd64.whl (32.1 kB view details)

Uploaded CPython 3.11+Windows x86-64

atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl (147.4 kB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ x86-64

atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl (152.6 kB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ ARM64

atomicshm-0.1.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (155.2 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

atomicshm-0.1.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (150.1 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl (31.0 kB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl (34.0 kB view details)

Uploaded CPython 3.11+macOS 10.9+ x86-64

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

Hashes for atomicshm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 130c406a69eec499aa70321795a377a3dbc0607a5bcb1b1a6a82f3e9f3a5d8b0
MD5 030771444d3f8855a015be55bdf4233b
BLAKE2b-256 db64e45e352b2541a9edf4befe6425825e8d1b896fac34acc4f0df22e22e0f63

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomicshm-0.1.0.tar.gz:

Publisher: release.yml on Ichoran/py-atomic-shared-mem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for atomicshm-0.1.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 ac09df2c45eaaa1d6ef38a2e072afb754b9ef039220d1e48657fa8a1ab96ccfb
MD5 0b861651202ed5559086a5ef198b11e5
BLAKE2b-256 fd6eb5029140c2591d65c0a91785dd0bdfaa8fcb7589fc374990af173da6a175

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for atomicshm-0.1.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 af45cfbf87e653d514fd0b371cd97be41f8d0e063b1ae1d050e4357b7ff69483
MD5 1f8ebdb8c31e30c0aa928d5d184e1b97
BLAKE2b-256 86684c1e512bec8607809a1a82b6eebf77b224ee4d4d7894b6ad886b2300e77d

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 78ecfd0f1ca7ba4e32d2d87f394b158aaaa725f56de71e4375268bd89902e150
MD5 cd21b12373fa45d70b762af6c7b4d410
BLAKE2b-256 5ea782c1ef30316e4fcc15aea3f5f11579b27268c3e7f83cda0cf6bc5357f02f

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 173e5024a9e0292d80674b5519dcd215e9681e040192a16541df05301362d16d
MD5 422b06738c14de2fae0c9779a237d84e
BLAKE2b-256 807f2f046731ea0716a6fb53af3cdf1bfff9189d57ce443b18ef9d2e4321796c

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for atomicshm-0.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ff95e229a9699b183b70d62af3b1176dab3af3365444159928016286f68bcee6
MD5 937ff0502ce0d16a1879e1006dbd254e
BLAKE2b-256 d3bd032540627af7d9f1ade34bac586e4f7125460cf3ba199b5a91d66ec4e562

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for atomicshm-0.1.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 b87f94aacf65b1da97bfa6223a6140b814e1cbb6fc4802c1ab5d6263a66c367c
MD5 2daacc5c7c480a9ba8f32a986c418a22
BLAKE2b-256 f4b9cdfa17181f5d80a5fef930787998d9c65adf4bb03010fbe519a2f304e8bd

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 93932da4ba8a8c687fd25c75b5f00486488871f95a5490cd37ad3f847538f0bb
MD5 6f307a8bdf06ca6c0cfb9d8faa30513a
BLAKE2b-256 7c3a2e8bb0ce2a7cf9ec36c7840d7f1cee3c396eb02bbb7439ee013fbb14ca03

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 7f20f378f4c2b2e41ff28d6750f773b71d0a095983350fa3f48bfab92de72c7e
MD5 cd9fc8ca697ac74abad42c682fa6ec35
BLAKE2b-256 b039a81f3cb343be8b9de628699c9e8f2800f835f5d0b5427f5252c3ef1e7a80

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for atomicshm-0.1.0-cp311-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 edbab6e00edb941bff02202b7f8a45496dfdf351c7fbdc35d755c54250b76cf9
MD5 f46608e35666e3bfb9d5d247965dba1c
BLAKE2b-256 05dce23abfb67dbb96420dacc97e37e68cade9876d022f6ddf9e59ba4fa2ddb4

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for atomicshm-0.1.0-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 586b9a46d42d927833af58c15df0e751ce2ada8133325551f6d01c2b05990c84
MD5 a8ffcd16cd92f73bace208e576de0676
BLAKE2b-256 5d49d61e92f3600f9147d6c803bc50e10648f9c4bc0b0b43bbd9f098b64ff044

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c48f4ddc243b5e82d43b480498eb20ab6e71a227780542e24265db268c70c8f2
MD5 f30e3ba09f6c87605896cc340057a898
BLAKE2b-256 cc6bd36d4e7a48be888d842804275d430827269e14d73dee4dcb90d2641f21b9

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7271094acfab21bc4148177149e03bdc8072abc1c92b6c0a948827f97617b3d1
MD5 a056e5f19439c27eb91ddb24345dd106
BLAKE2b-256 2c0c131f3e8a8be835ea24b13528ab38b03bb4c3beed3933817b2031a9354041

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for atomicshm-0.1.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a9a6cdf311632f0ce66c5aa43d4e2b31ccef014f77af3d36c63f72dd7067dcae
MD5 6d1ad1995a26cfb6040cf8aa5d295d1e
BLAKE2b-256 33aa1fe9889abc3611b1e77988d61604d36bd3b836b018b23f9e3f8c9d853aa8

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for atomicshm-0.1.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 d2f23b63cc712f762a66e16be1df2a1ada72954aaf39b06622593976f1701314
MD5 5fdab48da1b0a1021a4cafef21cca4a2
BLAKE2b-256 cbec54c218c9e9f6a0ca6fddd4f796678b2767595fbc6f97739c16cf3afb1f11

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 029c6c84a533ea7860d027d8070342ce8f342b0f391536a2087fece0b5ffb676
MD5 cfeb92d0c5a7ffae6f62b7a3f2f513da
BLAKE2b-256 ba6fd2e214ed27760a2d8722d730b36cc2dbcffc323b1a20f92906585e476193

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for atomicshm-0.1.0-cp311-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a2fee6ba68be6438fa50243337563fee5bb445be72f1d3e1627c338c37ea56ba
MD5 67657a5d26eccce9a79632c0f1a27ee9
BLAKE2b-256 f5fcdf298d6fcf07539f19ecda8f52b07e9f9cebb49df09db167409f69812948

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

17 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page