A high performance asynchronous Python client for Memcached with full batteries included
Project description
A high performance asynchronous Python client for Memcached with full batteries included
Emcache stands on the giant’s shoulders and implements most of the characteristics that are desired for a Memcached client based on the experience of other Memcached clients, providing the following main characteristics:
Support for many Memcached hosts, distributing traffic around them by using the Rendezvous hashing algorithm.
Support for different commands and different flag behaviors like noreply, exptime or flags.
Support for SSL/TLS protocol.
Support for SASL authentication by ASCII protocol.
Support for autodiscovery, which should work with AWS and GCP memcached clusters.
Adaptative connection pool, which increases the number of connections per Memcache host depending on the traffic.
Node healthiness traceability and an optional flag for disabling unhealthy for participating in the commands.
Metrics for operations and connections, send them to your favourite TS database for knowing how the Emcache driver is behaving.
Listen to the most significant cluster events, for example for knowing when a node has been marked as unhealthy.
Speed, Emcache is fast. See the benchmark section.
Usage
For installing
pip install emcache
The following snippet shows the minimal stuff that would be needed for creating a new client and saving a new key and retrieving later the value.
import asyncio
import emcache
async def main():
client = await emcache.create_client([emcache.MemcachedHostAddress('localhost', 11211)])
await client.set(b'key', b'value')
item = await client.get(b'key')
print(item.value)
await client.close()
asyncio.run(main())
Emcache has currently support, among many of them, for the following commands:
get Used for retrieving a specific key.
gets Cas version that returns also the case token of a specific key.
get_many Many keys get version.
gets_many Many keys + case token gets version.
gat Used retrieving a specific key if exists and update expiration time(Get and Touch).
gats Cas version that retrieving a specific key if exists and update expiration time(Get and Touch with Cas).
gat_many Many keys gat version.
gats_many Many keys + case token gats version.
set Set a new key and value
add Add a new key and value, if and only if it does not exist.
replace Update a value of a key, if and only if the key does exist.
append Append a value to the current one for a specific key, if and only if the key does exist.
prepend Prepend a value to the current one for a specific key, if and only if the key does exist.
cas Update a value for a key if and only if token as provided matches with the ones stored in the Memcached server.
version Version string of this server.
flush_all Its effect is to invalidate all existing items immediately (by default) or after the expiration specified.
delete The command allows for explicit deletion of items.
touch The command is used to update the expiration time of an existing item without fetching it.
increment/decrement Commands are used to change data for some item in-place, incrementing or decrementing it.
cache_memlimit This command allow set in runtime cache memory limit.
stats Show a list of required statistics about the server, depending on the arguments.
verbosity Command control STDOUT/STDERR info, choose level and look logging memcached.
Take a look at the documentation for getting a list of all of the operations that are currently supported.
Some of the commands have support for the following behavior flags:
noreply for storage commands like set we do not wait for an explicit response from the Memcached server. Sacrifice the explicit ack from the Memcached server for speed.
flags for storage we can save an int16 value that can be retrieved later on by fetch commands.
exptime for storage commands this provides a way of configuring an expiration time, once that time is reached keys will be automatically evicted by the Memcached server
For more information about usage, read the docs.
Benchmarks
The following table shows how fast - operations per second - Emcache can be compared to the other two Memcached Python clients, aiomcache and pymemcache. For that specific benchmark two nodes were used, one for the client and one for the Memcached server, using 32 TCP connections and using 32 concurrent Asyncio tasks - threads for the use case of Pymemcache. For Emcache and Aiomcache uvloop was used as a default loop.
In the first part of the benchmark, the client tried to run as mucha set operations it could, and in a second step the same was done but using get operations.
Client |
Concurrency |
Sets opS/sec |
Sets latency AVG |
Gets opS/sec |
Gets latency AVG |
---|---|---|---|---|---|
aiomcache |
32 |
33872 |
0.00094 |
34183 |
0.00093 |
pymemcache |
32 |
32792 |
0.00097 |
32961 |
0.00096 |
emcache |
32 |
49410 |
0.00064 |
49212 |
0.00064 |
emcache (autobatching) |
32 |
49410 |
0.00064 |
89052 |
0.00035 |
Emcache performed better than the other two implementations reaching almost 50K ops/sec for get and set operations. One autobatching is used it can boost the throughtput x2 (more info about autobatching below)
Another benchmark was performed for comparing how each implementation will behave in case of having to deal with more than 1 node, a new benchmark was performed with different cluster sizes but using the same methodology as the previous test by first, performing as many set operations it could and later as many get operations it could. For this specific use test with Aiomemcahce could not be used since it does not support multiple nodes.
Client |
Concurrency |
Memcahed Nodes |
Sets opS/sec |
Sets latency AVG |
Gets opS/sec |
Gets latency AVG |
---|---|---|---|---|---|---|
pymemcache |
32 |
2 |
21260 |
0.00150 |
21583 |
0.00148 |
emcache |
32 |
2 |
42245 |
0.00075 |
48079 |
0.00066 |
pymemcache |
32 |
4 |
15334 |
0.00208 |
15458 |
0.00207 |
emcache |
32 |
4 |
39786 |
0.00080 |
47603 |
0.00067 |
pymemcache |
32 |
8 |
9903 |
0.00323 |
9970 |
0.00322 |
emcache |
32 |
8 |
42167 |
0.00075 |
46472 |
0.00068 |
The addition of new nodes did not add almost degradation for Emcache, in the last test with 8 nodes Emcache reached 42K get ops/sec and 46K set ops/sec. On the other hand, Pymemcached suffered substantial degradation making Emcache ~x5 times. faster.
Autobatching
Autobatching provides you a way for fetching multiple keys using a single command, batching happens transparently behind the scenes without bothering the caller.
For start using the autobatching feature you must provide the parameter autobatching as True, hereby all usages of the get and gets command will send batched requests behind the scenes.
Get´s are piled up until the next loop iteration. Once the next loop iteration is reached all get´s are transmitted using the same Memcached operation.
Autobatching can boost up the throughput of your application x2/x3.
Development
Clone the repository and its murmur3 submodule
git clone --recursive git@github.com:emcache/emcache
Compile murmur3
pushd vendor/murmur3
make static
popd
Install emcache with dev dependencies
make install-dev
Testing
Run docker containers, add read write privileges
docker compose up -d
docker exec memcached_unix1 sh -c "chmod a+rw /tmp/emcache.test1.sock"
docker exec memcached_unix2 sh -c "chmod a+rw /tmp/emcache.test2.sock"
Run tests
make test
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
File details
Details for the file emcache-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 271.5 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0993e9b762089522accbc217af757a6ddfe2407a6926c4d765ad5e03e2ba4408 |
|
MD5 | 478d561f46e34f336821526ed91e517c |
|
BLAKE2b-256 | 27f595c0ff566bd1386cacdc4b34983da2d3ff4aaa5352761f9b601ef305d1e1 |
File details
Details for the file emcache-1.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 275.1 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e594391d61a99705f4b6d907759853008c76440144c4f9ac627663e6c73a5e34 |
|
MD5 | b2be6c5e789067de036612cb77b11e75 |
|
BLAKE2b-256 | 225670d928f3126f88256d05d0080049cbec13c469e37b1c47e8541be174d71f |
File details
Details for the file emcache-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 269.4 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 492b05fb2d3944ac0c90daa7e61e8100392eb8e21322738aaae27d1f05727a52 |
|
MD5 | 43cf7e3e28f4387a6a51973310bb5149 |
|
BLAKE2b-256 | f315401b8cf24ea77a848d119c85197c55eaa6075a5512e1d6d953878a693d18 |
File details
Details for the file emcache-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 266.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea25219ed739142a4adcaaa38e96654094eea8e8ff0d189283d76099fd2e095d |
|
MD5 | b26f54f13bf8ccca23b32a18d59ee644 |
|
BLAKE2b-256 | 71965a8c04d5adfc28d8ab604091d956f5c07a0cb04986dda40c0e8c61212201 |
File details
Details for the file emcache-1.3.0-cp311-cp311-macosx_11_0_arm64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 72.3 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d87467ad8aceec0ac86072edad19d77826f3cb30a46b8076acc07fde5da8c273 |
|
MD5 | 93cf7d6c600b4ea25d48b5283fe64109 |
|
BLAKE2b-256 | c2e32addcf231237997880b703a3fca4055bff5b2f033d66ecacb7fdb6a9e1d4 |
File details
Details for the file emcache-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 73.9 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 500d2ec4b05491d77497438e5f924965ecbb3e5482e9d3299685d895f9695f2d |
|
MD5 | 3a542e51e50514c8248a8432bafe9bf8 |
|
BLAKE2b-256 | e21aa1daef8fb802d3db521e2390faeff44f4b6f0fc8fd1bbf6a28549d3ee6d9 |
File details
Details for the file emcache-1.3.0-cp311-cp311-macosx_10_9_universal2.whl
.
File metadata
- Download URL: emcache-1.3.0-cp311-cp311-macosx_10_9_universal2.whl
- Upload date:
- Size: 112.1 kB
- Tags: CPython 3.11, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e4df115ff7c18f61e6b7afe6afad653b92ce7dc5e14e9974505058cbbbb56f1 |
|
MD5 | 538e352898b96ba97e3fa39139792790 |
|
BLAKE2b-256 | a3725d2efefc115b366d71e69a4a4f7a78ffeb9958c18ba7e1801c2a8b62fb0a |
File details
Details for the file emcache-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 243.8 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84906ee5eb5d628cddcaf5739bf917e4e324bc6500d5bfeb6a6a6963156df5b8 |
|
MD5 | bdb678bf80dc9e554d49438cf86cc75d |
|
BLAKE2b-256 | 01f8e2110e3ecc88370181af3223d7e327bdc62af15146a8e9aacab2f8d9d3d8 |
File details
Details for the file emcache-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 245.1 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1214b8ea3a6e91b89baf885f5816a02d9546cb58d0ea5cabc259b9a30cda2881 |
|
MD5 | 3caea35925b80b1508bd98c25fb0296a |
|
BLAKE2b-256 | e37129d5a67e64e30e779df8464f2c62625a42f5458f38706e9b3df7b13e8234 |
File details
Details for the file emcache-1.3.0-cp310-cp310-macosx_11_0_arm64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 72.1 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 04d85fc7a65a2963e082a9ab0a27a37b853909a32c05c6664d8ea0ca0ca12d74 |
|
MD5 | e8d252a63fff5b9d53fb576279109229 |
|
BLAKE2b-256 | 81f773d7a6e5b645348b1346b0dfa2ba6a2285f93451f5abd379be40d0148b76 |
File details
Details for the file emcache-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 73.5 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1bb6738ba17b045f69768cfe09baa61dbd1b0553ac106a2508dc95d92d7f4fc0 |
|
MD5 | 91f479543e24992700fa38adae86d1de |
|
BLAKE2b-256 | dbf392750a5ce4aabe30418c51a9e0483b301d7fedc5f6b8beed8def487ad4ab |
File details
Details for the file emcache-1.3.0-cp310-cp310-macosx_10_9_universal2.whl
.
File metadata
- Download URL: emcache-1.3.0-cp310-cp310-macosx_10_9_universal2.whl
- Upload date:
- Size: 111.5 kB
- Tags: CPython 3.10, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab39d404ea3619b95c37e9a57d463f5f4e571a45637eba526e2e246e7afb6ad7 |
|
MD5 | 451ceb9c3d05a53826cfc9d88c7dabcc |
|
BLAKE2b-256 | 171ee1f13c24ca32c1ba79a6231522a3bab9581aaab82b2ca55d410a60ec540f |
File details
Details for the file emcache-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 246.7 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c7c9f0855a879d59db6e9c12a792c6fc1e4d0473dd4a5edcc7d38b3662ff016 |
|
MD5 | 2b93fbade694352d76650092dfd06313 |
|
BLAKE2b-256 | 55916b14fac65d8ddb71b6cd24e0accce932a451452f3d18e4cb737b8e9fd1b0 |
File details
Details for the file emcache-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 248.1 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cfb1f70a2a5bd4fc29c048bb3084f0e76d8d3c40411b7eb66e485dae9bb9e843 |
|
MD5 | 9c1deabfdb04654f53652578c4d4dc1c |
|
BLAKE2b-256 | 03e3d9381eca3dc9d0b77fcbe526348a92b741056b2d67f384b3e81008b6163e |
File details
Details for the file emcache-1.3.0-cp39-cp39-macosx_11_0_arm64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 72.6 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ddb0a6aa9a3c9fa75010496c85d0bd9d2b5b4b325849e008e762b9e58950d6e |
|
MD5 | 8e562db305173f4837c2e0982e9755d6 |
|
BLAKE2b-256 | fde9c0dc293f60523af7a5726031a76ac90d21c698c0fdbbd4c44dd64a73cf0c |
File details
Details for the file emcache-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 74.1 kB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fefbadeafa710fc963e68f5980d4b4e2951362dacfe3ba89c629367f220519cb |
|
MD5 | 7b225b617d44f00c61de7e51c7c6dc2a |
|
BLAKE2b-256 | 4edb2a5cf2eea68695efddc1d2dfcfdd4d6b8185e618ceb7a3150714f5b998f5 |
File details
Details for the file emcache-1.3.0-cp39-cp39-macosx_10_9_universal2.whl
.
File metadata
- Download URL: emcache-1.3.0-cp39-cp39-macosx_10_9_universal2.whl
- Upload date:
- Size: 112.6 kB
- Tags: CPython 3.9, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7966d59f52ae82ed2dcc924d92edd94e8858862da013aebb484e3b545d410dd3 |
|
MD5 | 8dbb2cea3dfc771776bd2c0c07ee0da0 |
|
BLAKE2b-256 | 501d111ff145bce09b01967474193a53a36f0eda45dfaa1ef4cb0259f10a901a |
File details
Details for the file emcache-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 244.5 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e310dffce8ed046f8125348b97e521dd368aea0e0e1e9694217f8e7138d28ad |
|
MD5 | 18610981f42fa2489f9e3bf8ad4f9688 |
|
BLAKE2b-256 | ca8832454209eea4a05045d87f350e39cf215afdb8694bb0e2a8aa2f5328636a |
File details
Details for the file emcache-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 244.4 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 241704f95421bf5cd85411902ce4a8b85ac86cb4a636645769be4248f0996a96 |
|
MD5 | 612f15c0c7eef2a5cf7938655b63b488 |
|
BLAKE2b-256 | 2d83de0e7c2e40a22f3b06e7ea7675d46a1234b2d8f7547d6359dd77384a7f59 |
File details
Details for the file emcache-1.3.0-cp38-cp38-macosx_11_0_arm64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp38-cp38-macosx_11_0_arm64.whl
- Upload date:
- Size: 73.3 kB
- Tags: CPython 3.8, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8110848a995abacae2bcacd6e58349a1af83d93cfd520adb628a102377e3fe3e |
|
MD5 | 91a590fd0364ab6993ca7238112dfa93 |
|
BLAKE2b-256 | 91e7c46f9c60a7370d9711329f8b796714fdaa6b87f00c88f0f5b8528cffc8a3 |
File details
Details for the file emcache-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: emcache-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 75.0 kB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bce7b95b3878cb27c4d28e00187933e3f927c55e2ccc9b62ef1dc94fef0d45a |
|
MD5 | a01dbc5ab9590c1738e343d03bbc4233 |
|
BLAKE2b-256 | 80920b508156dbe77d7b8cb495b17262d50cfede087ef24310e96e65e48a6f94 |
File details
Details for the file emcache-1.3.0-cp38-cp38-macosx_10_9_universal2.whl
.
File metadata
- Download URL: emcache-1.3.0-cp38-cp38-macosx_10_9_universal2.whl
- Upload date:
- Size: 114.1 kB
- Tags: CPython 3.8, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d061591c094f22d1a800f1a450597243f9cb52e0e8cd48e2be0ee7703ecf91a0 |
|
MD5 | 2dfb095dee697c0464bf6459a10399ec |
|
BLAKE2b-256 | 95e7efe54140fac7b473b01c53dc6fa0fd00935e62de3a7ebfcde69c0994c1de |