Cython实现的高速、可重入、乐观锁
项目描述
FastRLock
这是CPython的一个C级实现,用于快速、可重入的乐观锁。它是threading.RLock的替代品。FastRLock是用Cython实现的,并提供了一个C-API,可以通过from fastrlock cimport rlock或from cython.cimports.fastrlock import rlock直接从Cython代码中使用。
在正常条件下,它在Python 2.7中的速度比threading.RLock快约10倍,因为它避免了所有锁定,除非两个或更多线程同时尝试获取它。在拥塞状态下,由于Cython实现,它仍然比RLock快约10%。
这主要等同于Python 3.2中修订的RLock实现,但由于Cython实现而更快。然而,在Python 3.4及以后版本中,stdlib中的threading.RLock实现通过Python API调用时,通常与该包提供的锁一样快,甚至更快。当通过Cython API从其他Cython模块调用时,FastRLock在这些系统上仍然更快。
它最初在这里发布为代码配方:https://code.activestate.com/recipes/577336-fast-re-entrant-optimistic-lock-implemented-in-cyt/
FastRLock已在Lupa中使用了几年,并经过了测试。
它是如何工作的?
FastRLock 实现优化了非拥塞情况。它通过利用全局解释器锁(GIL)的可用性来工作。由于它知道在调用 acquire()/release() 方法时它持有 GIL,因此它可以安全地检查锁是否被其他线程持有,并且只要始终是相同的线程获取它,就可以简单地计数任何重入。这比实际获取底层锁要快得多。
当第二个线程也想获取锁时,它首先检查锁计数,发现锁已经被占用。如果底层锁已经被另一个线程占用,它就释放 GIL 并请求获取锁,就像 RLock 一样。然而,如果底层锁未被占用,它就立即获取它,并通过告诉当前所有者在完成时释放它来基本上转交所有权。然后,它回退到正常的非所有者行为,请求获取锁,并在最终释放时获取它。这确保了只有在至少两个线程想要时才获取真正的锁。
所有这些操作基本上都是原子的,因为任何修改锁状态的线程总是持有 GIL。请注意,实现必须在处理锁时不得调用任何 Python 代码,因为调用 Python 可能导致上下文切换,这会将 GIL 转交给另一个线程,从而破坏原子性。因此,代码滥用 Cython 的 ‘nogil’ 注解以确保不会意外地插入任何 Python 代码。
它有多快?
以下是 Python 2.7 的一些计时,用于以下场景
- 五个获取-释放周期(“lock_unlock”) 
- 五个获取调用随后是五个释放调用(嵌套锁定,“reentrant_lock_unlock”) 
- 获取和释放调用的混合和部分嵌套序列(“mixed_lock_unlock”) 
- 五个不阻塞的获取-释放周期(“lock_unlock_nonblocking”) 
所有这四种情况都针对单线程和多线程的情况进行了基准测试,其中多线程使用了 10 个线程。我还使用 20 个线程进行了测试,以查看它需要大约两倍的时间。请注意,拥塞情况对于两个锁都相当慢,基准测试包括线程创建时间,因此在这里我循环了 1000 次,而不是单线程情况的 100000 次,以获取有用的计时。
Testing _RLock (2.7.18) sequential (x100000): lock_unlock : 853.55 msec reentrant_lock_unlock : 684.52 msec mixed_lock_unlock : 758.27 msec lock_unlock_nonblocking : 860.40 msec context_manager : 2876.00 msec threaded 10T (x1000): lock_unlock : 2210.69 msec reentrant_lock_unlock : 1864.38 msec mixed_lock_unlock : 1963.10 msec lock_unlock_nonblocking : 3709.91 msec context_manager : 2640.32 msec Testing FastRLock (0.8.1) sequential (x100000): lock_unlock : 139.76 msec reentrant_lock_unlock : 137.56 msec mixed_lock_unlock : 140.75 msec lock_unlock_nonblocking : 164.64 msec context_manager : 593.06 msec threaded 10T (x1000): lock_unlock : 1621.13 msec reentrant_lock_unlock : 1807.09 msec mixed_lock_unlock : 1834.21 msec lock_unlock_nonblocking : 1642.06 msec context_manager : 1730.29 msec Testing Cython interface of FastRLock (0.8.1) sequential (x100000): lock_unlock : 19.14 msec reentrant_lock_unlock : 19.12 msec mixed_lock_unlock : 16.81 msec lock_unlock_nonblocking : 14.49 msec threaded 10T (x1000): lock_unlock : 1511.85 msec reentrant_lock_unlock : 1541.96 msec mixed_lock_unlock : 1585.70 msec lock_unlock_nonblocking : 1585.35 msec
它与 Python 3.7 及以后版本相比如何?
这里的结果更加复杂。根据 CPython 安装的优化,它可能更快,速度大致相同,或者略慢。无论如何,直接 Cython 接口总是比通过 Python API 更快,因为它避免了 Python 调用开销并执行 C 调用。
Testing RLock (3.10.1) sequential (x100000): lock_unlock : 138.36 msec reentrant_lock_unlock : 95.35 msec mixed_lock_unlock : 102.05 msec lock_unlock_nonblocking : 131.44 msec context_manager : 616.83 msec threaded 10T (x1000): lock_unlock : 1386.60 msec reentrant_lock_unlock : 1207.75 msec mixed_lock_unlock : 1319.62 msec lock_unlock_nonblocking : 1325.07 msec context_manager : 1357.93 msec Testing FastRLock (0.8.1) sequential (x100000): lock_unlock : 77.47 msec reentrant_lock_unlock : 64.14 msec mixed_lock_unlock : 73.51 msec lock_unlock_nonblocking : 70.31 msec context_manager : 393.34 msec threaded 10T (x1000): lock_unlock : 1214.13 msec reentrant_lock_unlock : 1171.75 msec mixed_lock_unlock : 1184.33 msec lock_unlock_nonblocking : 1207.42 msec context_manager : 1232.20 msec Testing Cython interface of FastRLock (0.8.1) sequential (x100000): lock_unlock : 18.70 msec reentrant_lock_unlock : 15.88 msec mixed_lock_unlock : 14.96 msec lock_unlock_nonblocking : 13.47 msec threaded 10T (x1000): lock_unlock : 1236.21 msec reentrant_lock_unlock : 1245.77 msec mixed_lock_unlock : 1194.25 msec lock_unlock_nonblocking : 1206.96 msec
fastrlock 更新日志
0.8.2 (2023-08-27)
- 使用 Cython 3.0.2 重建以添加 Python 3.12 支持。 
0.8.1 (2022-11-02)
- 使用 Cython 3.0.0a11 重建以添加 Python 3.11 支持。 
0.8 (2021-10-22)
- 使用 Cython 3.0.0a9 重建以在最近的 Python 3.x 版本中提高性能。 
0.7 (2021-10-21)
- 适配未签名的线程 ID,如 Py3.7+ 所用。(由 Guilherme Dantas 提供的原始补丁) 
- 使用 Cython 0.29.24 构建,以支持 Py3.10 及以后版本。 
0.6 (2021-03-21)
- 使用 Cython 0.29.22 重建以支持 Py3.9 及以后版本。 
0.5 (2020-06-05)
- 使用 Cython 0.29.20 重建以支持 Py3.8 及以后版本。 
0.4 (2018-08-24)
- 使用 Cython 0.28.5 重建。 
- 通过配置指导优化,Linux 轮子更快。 
- 将缺少的文件添加到 sdist。(由 Mark Harfouche 提供的补丁,Github 问题 #5) 
0.3 (2017-08-10)
- 改进 C-API 的 cimport 支持(由 Naotoshi Seo 提供的补丁,Github 问题 #3) 
- 提供 fastrlock.__version__ 
0.2 (2017-08-09)
- 将缺少的说明文件添加到 sdist 
0.1 (2017-06-04)
- 初始发布 
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
哈希值 for fastrlock-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 685e656048b59d8dfde8c601f188ad53a4d719eb97080cafc8696cda6d75865e | |
| MD5 | a64c0d4dedb731b9c7730192d031ae97 | |
| BLAKE2b-256 | 10847ee1705e4079f5eb54bf46d3a7eadf5b684fc2a8dce18a1df013c2d41c55 | 
哈希值 for fastrlock-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | a3dcc876050b8f5cbc0ee84ef1e7f0c1dfe7c148f10098828bc4403683c33f10 | |
| MD5 | eeed710e5f7077e7109695030ccaf724 | |
| BLAKE2b-256 | e1a5a853ca4c0da19d98664ecc36e8104931f63a67e33dd187cb91848783ca94 | 
哈希值 for fastrlock-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b22ea9bf5f9fad2b0077e944a7813f91593a4f61adf8faf734a70aed3f2b3a40 | |
| MD5 | f3abc9a14873f0c8172da01afb323ef6 | |
| BLAKE2b-256 | 2102fe8f8e38cb875d1a882ef44bbc181310fde55cdb9046058f150d09c2af9b | 
哈希值 for fastrlock-0.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | dcc1bf0ac8a194313cf6e645e300a8a379674ceed8e0b1e910a2de3e3c28989e | |
| MD5 | b4254665a84eee6936786d9e9ba6fadc | |
| BLAKE2b-256 | 3eca16355012a2a5a029a524fd1eb8496eb43190f0e35f623a793ef73e16eb40 | 
哈希值 for fastrlock-0.8.2-cp312-cp312-macosx_10_15_universal2.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 98195866d3a9949915935d40a88e4f1c166e82e378f622c88025f2938624a90a | |
| MD5 | 14d97887daf6d10ec7890dc980edaf76 | |
| BLAKE2b-256 | 0d54b7c516be2039a4aabc4fbbc5d0346b9c4d878222346f7b37b85ae3624590 | 
哈希值 for fastrlock-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4fb2e77ff04bc4beb71d63c8e064f052ce5a6ea1e001d528d4d7f4b37d736f2e | |
| MD5 | 86884d2ff32263097857c3ffe43f6f9a | |
| BLAKE2b-256 | 8eee1ad545f904ad8cd1ce7598b5af501148749a65dff8b9a7498cf7ceedafbb | 
哈希值 for fastrlock-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 88f079335e9da631efa64486c8207564a7bcd0c00526bb9e842e9d5b7e50a6cc | |
| MD5 | b9e7c65e8ac0274a646a58737f4b4de7 | |
| BLAKE2b-256 | 36af0f0dd7cfc7b202870a6d520b19f8d378ee638cd2b732a330bb16bcc8bc4b | 
哈希值 for fastrlock-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | d47713ffe6d4a627fbf078be9836a95ac106b4a0543e3841572c91e292a5d885 | |
| MD5 | 9bef17a502ea1189158122bace0ae2b2 | |
| BLAKE2b-256 | ba51d66763b993d4f2bbd816fc37f42b78e9b45e98fc0c141bc8605ce0a21c9d | 
哈希值用于fastrlock-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | dbdce852e6bb66e1b8c36679d482971d69d93acf1785657522e51b7de30c3356 | |
| MD5 | 8ee1464140e1e23470347b08359bffbd | |
| BLAKE2b-256 | 92d33fce38d4ed16db0936cc39fc7ea06ea0c2398d7033a37e49880edd0a8ca6 | 
哈希值用于fastrlock-0.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 75c07726c8b1a52147fd7987d6baaa318c5dced1416c3f25593e40f56e10755b | |
| MD5 | 19d9de0db8f5b4152468108b59a1316f | |
| BLAKE2b-256 | 7f8a24067b0c3e5a0896dbe5e1e547ae176f25b94ce38e21020d1bf78d18d3ba | 
哈希值用于fastrlock-0.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | c6bffa978793bea5e1b00e677062e53a62255439339591b70e209fa1552d5ee0 | |
| MD5 | f7c53e383361495f463d6298604b6bc3 | |
| BLAKE2b-256 | 4982df877710dd30860c5e858098fa56ce7b6d4ec82f552bfb384e4cd9eadf95 | 
哈希值用于fastrlock-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ea96503b918fceaf40443182742b8964d47b65c5ebdea532893cb9479620000c | |
| MD5 | ed993718c5a2aee0a8948192cc0cbe28 | |
| BLAKE2b-256 | 58ff653b5b507aa75a962b2fc93bf055d45aa1015b1581b52883052e19abf31b | 
哈希值用于fastrlock-0.8.2-cp311-cp311-macosx_10_15_universal2.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 790fc19bccbd39426060047e53629f171a44745613bf360a045e9f9c8c4a2cea | |
| MD5 | 91ce4d7b3135f6bc2944a7e7a0677452 | |
| BLAKE2b-256 | 1c0e2324d71832db47e2949f846e80f79a1391a5cb79661cb1111eb23c27c8d4 | 
哈希值用于fastrlock-0.8.2-cp310-cp310-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b443e73a4dfc7b6e0800ea4c13567b9694358e86f53bb2612a51c9e727cac67b | |
| MD5 | 4f043841ce3f6d0d6ef54a9325bee4f5 | |
| BLAKE2b-256 | 3da3cc2412acb468e0c59f966de22ea90e8b51f6e6e305251a2d94432a437575 | 
哈希值用于fastrlock-0.8.2-cp310-cp310-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e8b49b5743ede51e0bcf6805741f39f5e0e0fd6a172ba460cb39e3097ba803bb | |
| MD5 | 6e3809e431441dc4891fe25af386a4d7 | |
| BLAKE2b-256 | d72d99707885ce625d2a5deb0fcba3eaee86462914d05009ce04cf1cfa5bacd3 | 
哈希值用于fastrlock-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 9121a894d74e65557e47e777060a495ab85f4b903e80dd73a3c940ba042920d7 | |
| MD5 | 9d57f362de873c2c17cc6c18eaf7cd86 | |
| BLAKE2b-256 | 1292ced328dd5ee079823c95d199c311eaa3b9eb44807832d8e5370ae9224894 | 
哈希值用于fastrlock-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 43a241655e83e4603a152192cf022d5ca348c2f4e56dfb02e5c9c4c1a32f9cdb | |
| MD5 | ef44a5b9a54c6444e86ca9ea3acf1d94 | |
| BLAKE2b-256 | 2b7a519dda6365ceb81f35be4e3b26187ebc8aa8865679675b92a1547f3ca9f2 | 
哈希值用于fastrlock-0.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 08315bde19d0c2e6b06593d5a418be3dc8f9b1ee721afa96867b9853fceb45cf | |
| MD5 | e6dcd31d3beafc6f453ebea10f8cc292 | |
| BLAKE2b-256 | bc5dd1f89b59f5b4b4710fd126e0df31ca4c58f46fc0a831058fc49010972d3d | 
哈希值用于fastrlock-0.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 27786c62a400e282756ae1b090bcd7cfa35f28270cff65a9e7b27a5327a32561 | |
| MD5 | 52853242786cd87424d3cd1299269913 | |
| BLAKE2b-256 | 526615aa713925023b3eb8970f46acd3b2f02ec0b5137a418cad5250cbe8cfdc | 
哈希值 for fastrlock-0.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 11bbbbc526363955aeddb9eec4cee2a0012322b7b2f15b54f44454fcf4fd398a | |
| MD5 | 9e9c65a58b39a1ad2cc45a9c777190ff | |
| BLAKE2b-256 | 39c129cbea3399fe108007df72198e9e0cba8f081eefdba10edbd5bc208fe5ac | 
哈希值 for fastrlock-0.8.2-cp310-cp310-macosx_11_0_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e9904b5b37c3e5bb4a245c56bc4b7e497da57ffb8528f4fc39af9dcb168ee2e1 | |
| MD5 | 00d8a38c35842547770a7f565422da34 | |
| BLAKE2b-256 | 6ad705d9a697abf348bf73b5260fb1b89f539376b2bdec97d423fd20bf1e783a | 
哈希值 for fastrlock-0.8.2-cp39-cp39-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e27c3cd27fbd25e5223c5c992b300cd4ee8f0a75c6f222ce65838138d853712c | |
| MD5 | 37a1a478a2b07e136dcc693cf6b08c4a | |
| BLAKE2b-256 | 35ef373bc3c5aa69d9f788d484201f5e22fdd2aa73c294dbc2961dc53f6a9277 | 
哈希值 for fastrlock-0.8.2-cp39-cp39-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ff75c90663d6e8996610d435e71487daa853871ad1770dd83dc0f2fc4997241e | |
| MD5 | a87c63dea496284951091601dcc38240 | |
| BLAKE2b-256 | 8a1abd0928b10155d09a3b3130c06488e2783883bb6a72ec514c5091a747201d | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | adcb9e77aa132cc6c9de2ffe7cf880a20aa8cdba21d367d1da1a412f57bddd5d | |
| MD5 | 0882fd5e3286517ceae5e035aab93646 | |
| BLAKE2b-256 | d6da6ec58d50149af1a0a8b410e845501170b0f2370b11921647bf8e60468a7f | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7269bb3fc15587b0c191eecd95831d771a7d80f0c48929e560806b038ff3066c | |
| MD5 | 2535faf95a0dd33fad5ac7b7f1ef1adf | |
| BLAKE2b-256 | c9dc957b0934bfca8045b41e66ed998bf242f7ed7f06eed0c5cc0d797fc5c6b0 | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4d63b6596368dab9e0cc66bf047e7182a56f33b34db141816a4f21f5bf958228 | |
| MD5 | 971adf67e027c63ecdd88a910f50998f | |
| BLAKE2b-256 | a80bfde26e4e220fd9351ba1e1da61d8a8f3db30ee091b1d56d74fbb219f4971 | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 99dd6652bd6f730beadf74ef769d38c6bbd8ee6d1c15c8d138ea680b0594387f | |
| MD5 | c6ce6c6d1aed68463fb079e760a296c6 | |
| BLAKE2b-256 | 91e3df5d25687f94df24228f2a927aaf98334507849cbf715a75d079e6bbb80f | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 9af691a9861027181d4de07ed74f0aee12a9650ac60d0a07f4320bff84b5d95f | |
| MD5 | 1d0ef6a4a13ef7e59498d385bfcde611 | |
| BLAKE2b-256 | 2c8e8be52367f04ef0a3504010bed39b57c459114ea170f1be8821ee37b085ed | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2587cedbb36c7988e707d83f0f1175c1f882f362b5ebbee25d70218ea33d220d | |
| MD5 | 14557049a00353de0fcf060855aef5c1 | |
| BLAKE2b-256 | d8cbf75c4eb5de5edf43e4e41dfa604512c24d1f9387746803dfbc2649888d08 | 
哈希值 for fastrlock-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | a3b8b5d2935403f1b4b25ae324560e94b59593a38c0d2e7b6c9872126a9622ed | |
| MD5 | f6f7a4713830bce70a5273f03961fe60 | |
| BLAKE2b-256 | 94acee89216a056842005b5e35b4354734ef20e86e173628a78dd5b6612da2c9 | 
哈希值 for fastrlock-0.8.2-cp39-cp39-macosx_11_0_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ddf5d247f686aec853ddcc9a1234bfcc6f57b0a0670d2ad82fc25d8ae7e6a15f | |
| MD5 | 29838f96704cfa48064d378fdde940c5 | |
| BLAKE2b-256 | 7edca0f4bbf958bb5d2731c71eb2e51102c36d0539930b4c0eb2f7990489d4dd | 
哈希值 for fastrlock-0.8.2-cp38-cp38-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 30bdbe4662992348132d03996700e1cf910d141d629179b967b146a22942264e | |
| MD5 | 10429fa5d3ffdee76a29ffec72221731 | |
| BLAKE2b-256 | 860cb3a4dcd609b632772029b439dc31bed764e856deec8b9ac653ede83c7000 | 
哈希值 for fastrlock-0.8.2-cp38-cp38-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ebb32d776b61acd49f859a1d16b9e3d84e7b46d0d92aebd58acd54dc38e96664 | |
| MD5 | 6fe04acf4d6a7e81e513bdb525001322 | |
| BLAKE2b-256 | 0489fad0e42357063be1af926dfa07dc24df0459eeeb394a4afb0467cba2bd3f | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 73426f5eb2ecc10626c67cf86bd0af9e00d53e80e5c67d5ce8e18376d6abfa09 | |
| MD5 | 147dbe6053144cf34ed41bb1f56a562c | |
| BLAKE2b-256 | 37e92140db63fd0bd663f9b9136557e0e3c0425614721e9b6c2a874e6e196631 | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | c393af77c659a38bffbca215c0bcc8629ba4299568308dd7e4ff65d62cabed39 | |
| MD5 | 5789fb258efd00c4cab112bd5c532d2a | |
| BLAKE2b-256 | 8d5fe0da7388eea6e7e94416384b7c073c2de3178e563d3a1e36676c3918ba91 | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | d34546ad2e4a480b94b6797bcc5a322b3c705c4c74c3e4e545c4a3841c1b2d59 | |
| MD5 | c6ad0be9815ec2429c8cb7ed7c94eb1e | |
| BLAKE2b-256 | c78815739ed0147dcdee0fdd8829ade585673eccbdb26afbe8f3bda442e579d3 | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 87f4e01b042c84e6090dbc4fbe3415ddd69f6bc0130382323f9d3f1b8dd71b46 | |
| MD5 | 0cb86e7e1208bc55e4262a4be9a6828e | |
| BLAKE2b-256 | 92250212242253047f5fa97a67c92c512475d0f3fba9d29547552f97e6a29a2d | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ad1bc61c7f6b0e58106aaab034916b6cb041757f708b07fbcdd9d6e1ac629225 | |
| MD5 | b367b63da7f9e88d4cb0c1d4f7fce83a | |
| BLAKE2b-256 | 351773548240545bb5d618479d86b6f8003de208ec260d820fce298afe333de2 | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8c1c91a68926421f5ccbc82c85f83bd3ba593b121a46a1b9a554b3f0dd67a4bf | |
| MD5 | 0d540efa6da92a25781b84fa5cb12b9e | |
| BLAKE2b-256 | 73485b49cbeb5674cfc93824e7314a9e6c7f77e34354d647875a037716802d5d | 
哈希值 for fastrlock-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 320fd55bafee3eb069cfb5d6491f811a912758387ef2193840e2663e80e16f48 | |
| MD5 | 13bda318d922679451fe886379ce02de | |
| BLAKE2b-256 | f1e28d7ad647fb65753837f942bc3bdac33b71f5d2f7ee516cfdba85b0a3da8b | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b8ca0fe21458457077e4cb2d81e1ebdb146a00b3e9e2db6180a773f7ea905032 | |
| MD5 | 0015fe4b14f9b3bf7768f72c1fd1ff17 | |
| BLAKE2b-256 | 3f9b45c5852b2f1868ce3c6676c6264e28b53093cb9c521dbfbb8a305438908d | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5dfb78dd600a12f23fc0c3ec58f81336229fdc74501ecf378d1ce5b3f2f313ea | |
| MD5 | e203822fdff0b0f08d5e5180a9867657 | |
| BLAKE2b-256 | cb76ef76214cf55267eca9a818caaeed0e45a57ee0fe598fd129a3137ce1580b | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b2a1c354f13f22b737621d914f3b4a8434ae69d3027a775e94b3e671756112f9 | |
| MD5 | 7b8036758dfb87192bc16fa65e54761a | |
| BLAKE2b-256 | 5b9a018bb51a385c34cd3cd427fddf556e9eb9d3c75d32c5047f8ffb6a2059c5 | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 59344c1d46b7dec97d3f22f1cc930fafe8980b3c5bc9c9765c56738a5f1559e4 | |
| MD5 | a134f70edd7a53a584510c1c7b46746e | |
| BLAKE2b-256 | 42261df8a5967fc9482e6f7f9013632cb6dabc8d505fe67897ed6697196a144b | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 643e1e65b4f5b284427e61a894d876d10459820e93aa1e724dfb415117be24e0 | |
| MD5 | 7f20dfaedf159b8fd90e5f8d4c478579 | |
| BLAKE2b-256 | 53263d74f6f62c88c67d4fe7573b81186c4224f50f858f98ea53431519a2a8f0 | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | eb31fe390f03f7ae886dcc374f1099ec88526631a4cb891d399b68181f154ff0 | |
| MD5 | 564722e9663ca2c8f4e35bd7fb06f760 | |
| BLAKE2b-256 | b2c9a8ae361f84f51a07429d71215660dbf9eb243cadaca1ec54765afc39bd9c | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 067edb0a0805bf61e17a251d5046af59f6e9d2b8ad01222e0ef7a0b7937d5548 | |
| MD5 | 3c691dd2e8e8936df75252d335b9db27 | |
| BLAKE2b-256 | 424e8bff5aa98ba1406c23a7dded13fea0bf2f536b4f8f7096fcbea0303e9cf5 | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 1b15430b93d7eb3d56f6ff690d2ebecb79ed0e58248427717eba150a508d1cd7 | |
| MD5 | c30d4d65acd4169e81d2092beab3f6e5 | |
| BLAKE2b-256 | cafb274f6576c93847ad2b08e71badf8aafd4710603f37e6f42e24857cd039d1 | 
哈希值 for fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | cf81e0278b645004388873e0a1f9e3bc4c9ab8c18e377b14ed1a544be4b18c9a | |
| MD5 | 977d5a1e2c3be03e504412ccb79e8b98 | |
| BLAKE2b-256 | 44ae326eea966d5601327b90d05ee2a4704d4bc976d4b58b665458a9c202ccd5 | 
哈希值 for fastrlock-0.8.2-cp36-cp36m-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5460c5ee6ced6d61ec8cd2324ebbe793a4960c4ffa2131ffff480e3b61c99ec5 | |
| MD5 | 0dd6231eef10726e8f79e49b6d6b0d0e | |
| BLAKE2b-256 | 2dd2728a3486e0dddd3eef35ff4fcd40ea819f56509299c26c4efff6ecd588b7 | 
哈希值 for fastrlock-0.8.2-cp36-cp36m-musllinux_1_1_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2c1719ddc8218b01e82fb2e82e8451bd65076cb96d7bef4477194bbb4305a968 | |
| MD5 | da82f1bcd30f23c191ae105e65ac7711 | |
| BLAKE2b-256 | 23f6b699130ffaecba175351d4b2cef7053ae9ad8a4936dba8c20bde83f6fab5 | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b32fdf874868326351a75b1e4c02f97e802147119ae44c52d3d9da193ec34f5b | |
| MD5 | 8573c061e0c89d41b11df58bc428694b | |
| BLAKE2b-256 | 8993eadeecc28efb476801af85c1c073dbab4d4e6c0686a324a8548aa8787f71 | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ab91b0c36e95d42e1041a4907e3eefd06c482d53af3c7a77be7e214cc7cd4a63 | |
| MD5 | 10a03336534107630f158c123f27c1ef | |
| BLAKE2b-256 | a5294f76b8b528e307c816b59428e11bd4ced190dc3025524ffe738092e3be67 | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 25945f962c7bd808415cfde3da624d4399d4ea71ed8918538375f16bceb79e1c | |
| MD5 | f44c1526d2aed3ea885a489c7f89e1a6 | |
| BLAKE2b-256 | 8f076a7da697c5f63b44e0d063ebe0b72d3120d3b8dfac5d85788a2e145463cc | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e380ec4e6d8b26e389713995a43cb7fe56baea2d25fe073d4998c4821a026211 | |
| MD5 | 42ddf093ed2626560a388eb69ac29a30 | |
| BLAKE2b-256 | a129ce6905d0c7ee6b2b0c43b664374bfc01f527c19eefc4a505530de46ce0fe | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 1fed2f4797ad68e9982038423018cf08bec5f4ce9fed63a94a790773ed6a795c | |
| MD5 | 956dd9545f97536c75e54ffe88a81323 | |
| BLAKE2b-256 | c648b8fa41288053e003c435247d7d0940794219a2d68edda258f49ecc1be262 | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4fb04442b6d1e2b36c774919c6bcbe3339c61b337261d4bd57e27932589095af | |
| MD5 | 38b81fab507972a528a113c3840b7b69 | |
| BLAKE2b-256 | 8cbb8fbed1b7bf980631166941bb11b1e8e75e714e65e340bc45401a40e4a1a7 | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2074548a335fcf7d19ebb18d9208da9e33b06f745754466a7e001d2b1c58dd19 | |
| MD5 | e78e7caae9a2ef40ea64c6d1cf1bd696 | |
| BLAKE2b-256 | 58d4939f9b5a0fe0c4ece6f154c761a068c1976e0ac229883a22d6cb651b2cb7 | 
哈希值 用于 fastrlock-0.8.2-cp36-cp36m-macosx_10_15_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 17734e2e5af4c07ddb0fb10bd484e062c22de3be6b67940b9cc6ec2f18fa61ba | |
| MD5 | 9f6f8964a9707419f8adc9964c0ed15e | |
| BLAKE2b-256 | 7a8e84a90880b65b36707ab31e58028def2e97923adaac96124ea875b6d9b826 | 
哈希值 用于 fastrlock-0.8.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 66f2662c640bb71a1016a031eea6eef9d25c2bcdf7ffd1d1ddc5a58f9a1ced04 | |
| MD5 | 33d3dda80b315d1e5b89c4ee1149bbe6 | |
| BLAKE2b-256 | fe3d179fabdc07b80e002239c81666ff80714f925dcea1672985e5017e2c7071 | 
哈希值 用于 fastrlock-0.8.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ccf39ad5702e33e4d335b48ef9d56e21619b529b7f7471b5211419f380329b62 | |
| MD5 | b3cf58e1c133bde41edf75c1fdfcc3eb | |
| BLAKE2b-256 | 73b1950738595329d93085319d16333ae4d7369a0a7655ab6d857015ebf3f05a | 
哈希值 用于 fastrlock-0.8.2-cp35-cp35m-macosx_10_15_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | a74f5a92fa6e51c4f3c69b29c4662088b97be12f40652a21109605a175c81824 | |
| MD5 | 075a1fc7bf122af160b7e4e6b48947f3 | |
| BLAKE2b-256 | 77abc26259eebbdaec53c18ed4a1b60486753ac41daf1d225e031f95f5511af1 | 
哈希值 用于 fastrlock-0.8.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 31a27a2edf482df72b91fe6c6438314d2c65290aa7becc55589d156c9b91f0da | |
| MD5 | 9ffb16e8dc1344974df6b1a10c0d7673 | |
| BLAKE2b-256 | 91999601c3e32896aa80f5608256fb3d289641441eb96d5199dfa94787524645 | 
哈希值 用于 fastrlock-0.8.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7a2ccaf88ac0db153e84305d1ef0aa138cea82c6a88309066f6eaa3bc98636cd | |
| MD5 | 37d800fb189107d4011d247d2a9b3987 | |
| BLAKE2b-256 | f8172eb680c5f73bfc2480f51ce21c068a5064449932abbcbf7f66e5b9355dff | 
哈希值 用于 fastrlock-0.8.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e4bbde174a0aff5f6eeba75cf8c4c5d2a316316bc21f03a0bddca0fc3659a6f3 | |
| MD5 | f11bf289adc8bd82adf48834df8bfe76 | |
| BLAKE2b-256 | 3ce11eabd0358e8d02d8f274f0afa657fa7822d1fc20b3bc9a2eff0c245809a8 | 
哈希值 用于 fastrlock-0.8.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2d5595903444c854b99c42122b87edfe8a37cd698a4eae32f4fd1d2a7b6c115d | |
| MD5 | ee3dd80e9ca113999e10fb7ad8e1a02a | |
| BLAKE2b-256 | 6cd1be28c684d5916b7f86fff40eb4f8d02939e664dccdb1a1932db0515ab669 | 
哈希值 用于 fastrlock-0.8.2-cp27-cp27m-macosx_10_15_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 94e348c72a1fd1f8191f25ea056448e4f5a87b8fbf005b39d290dcb0581a48cd | |
| MD5 | b8c7c3ce563c530a8033d26f77457769 | |
| BLAKE2b-256 | 55db393770d1ea22b2bbe12ca91a1b6c130f470ec0a002a3fa208f174de6bb50 |