我需要在python程序中使用原子CompareAndSet操作,但我没有找到关于如何使用它的参考。
python提供这样的原子功能吗?
谢谢。
来自atomics
库:
import atomics
a = atomics.atomic(width=4, atype=atomics.INT)
# set to 5 if a.load() compares == to 0
res = a.cmpxchg_strong(expected=0, desired=5)
print(res.success)
注意:我是这个库的作者
用于共享数据类型的Python原子。
https://sharedatomic.top
该模块可用于多进程和多线程条件下的原子操作。高性能python!高并发,高性能!
原子api具有多处理和多线程的示例:
您需要以下步骤来使用该模块:
-
创建子进程使用的函数,参考UIntAPI、IntAPI、BytearrayAPI、StringAPI、SetAPI、ListAPI,在每个进程中,可以创建多个线程。
def process_run(a): def subthread_run(a): a.array_sub_and_fetch(b'x0F') threadlist = [] for t in range(5000): threadlist.append(Thread(target=subthread_run, args=(a,))) for t in range(5000): threadlist[t].start() for t in range(5000): threadlist[t].join()
-
创建共享字节数组
a = atomic_bytearray(b'ab', length=7, paddingdirection='r', paddingbytes=b'012', mode='m')
-
启动进程/线程以使用共享字节数组
processlist = [] for p in range(2): processlist.append(Process(target=process_run, args=(a,))) for p in range(2): processlist[p].start() for p in range(2): processlist[p].join() assert a.value == int.to_bytes(27411031864108609, length=8, byteorder='big')