原子字节数组API:

Module shared_atomic

class shared_atomic.atomic_bytearray.atomic_bytearray(initial: bytes, mode: str = 'singleprocessing', length: Optional[int] = None, paddingdirection: str = 'right', paddingbytes: bytes = b'\x00', trimming_direction: str = 'right')

字节数组提供原子操作,字节数组必须不超过8字节

字节数组的构造函数,字节数组不能超过8字节

参数
  • initial – 字节数组的初始值,如果初值长于8字节,必须截短多余字节,必须指定目标长度,否则会失败。

  • mode – 字节数组的共享模式,’singleprocessing’或者’s’是单进程模式,’multiprocessing’或者’m’是多进程模式在windows平台上只支持单进程模式,设成’multiprocessing’或者’m’会被忽略。

  • length – 补齐或者截短之后的目标长度,如果不指定,使用原值

  • paddingdirection – 字节数组应该是从左边还是右边应该补齐,’right’ 或者 ‘r’代表右边,’left’ 或者’l’代表左边

  • paddingbytes – 补齐原始字节所需要的字节,默认是b’\0’,可以是多个字节组合像是b’ab’,会循环补足直到凑齐预期长度。

  • trimming_direction – 如果初始字节过长,应该在哪边字节应该被截短。默认是右边,’right’ 或者 ‘r’代表右边,’left’ 或者’l’代表左边

array_add_and_fetch(n: bytes, trim=True) bytes

原子增加并获取

参数
  • n – 需要加入数组的字节

  • trim – 是否去除尾部的b’\0’,默认去除

返回

返回生成的字节数组

array_and_and_fetch(n: bytes, trim=True) bytes

原子’与’并且获取结果

参数
  • n – ‘与’操作的另一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

返回生成的字节数组

array_compare_and_set(i, n: bytes) bool

原子比较和设置,比较指针v和e指向的内容,如果相等,这个过程就是读-修改-写的操作,将n的内容写入v,如果不相等,是只读操作,v的内容写入e. :参数 v: 指针v, 参数e:指针e 参数n将要设置的值,返回:指针v和e指向的内容是否相等。

参数
  • i – 与之比较的字节数组

  • n – 当返回真值的时候,需要设置的字节值

返回

当与i值相等时返回真,否则返回假

array_fetch_and_add(n: bytes, trim=True) bytes

原子获取和增加

参数
  • n – 需要补齐到数组的字节

  • trim – 是否去除尾部的b’\0’,默认去除

返回

数组字节的原始字节

array_fetch_and_and(n: bytes, trim=True) bytes

原子获取和’与’

参数
  • n – ‘与’操作的另外一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

数组字节的原始字节

array_fetch_and_nand(n: bytes, trim=True) bytes

原子获取和’与非’

参数
  • n – ‘与非’操作的另外一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

数组字节的原始字节

array_fetch_and_or(n: bytes, trim=True) bytes

原子获取和’或’

参数
  • n – ‘或’操作的另外一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

数组字节的原始字节

array_fetch_and_sub(n: bytes, trim=True) bytes

原子获取和减少

参数
  • n – 从数组当中减少的字节

  • trim – 是否去除尾部的b’\0’,默认去除

返回

数组字节的原始字节

array_fetch_and_xor(n: bytes, trim=True) bytes

原子获取和’异或’

参数
  • n – ‘异或’操作的另一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

数组字节的原始字节

array_get_and_set(data: bytes, trim=True) bytes

原子获取和设置

参数
  • data – 新数据

  • trim – 是否去除结尾的b’\0’,默认去除

返回

原始字节

array_nand_and_fetch(n: bytes, trim=True) bytes

原子’与非’和获取

:param n:the other operand of NAND operation :param trim: whether of not to trim the returning b’\0’ when fetch, default True :return: the contents of resulted bytearray

array_or_and_fetch(n: bytes, trim=True) bytes

原子’或’和获取

参数
  • n – ‘或’操作的另一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

返回生成的字节数组

array_shift(i, j)

3个指针之间两两交换值, initial_length字段也会被更新但非原子操作,将自己的值存入j然后将i存入自身

参数
  • i – 一个原子字节数组

  • j – 另一个原子字节数组

返回

array_store(i)

原子地从另一个字节数组存入这个字节数组,如果两个字节数组占的空间大小不一样函数会失败

参数

i – 将存入自己值的另一个字节数组

返回

array_sub_and_fetch(n: bytes, trim=True) bytes

原子减少与获取

参数
  • n – 从数组减去的字节

  • trim – 是否去除尾部的b’\0’,默认去除

返回

返回生成的字节数组

array_xor_and_fetch(n: bytes, trim=True) bytes

原子’异或’并获取

参数
  • n – ‘异或’操作的另一个操作数

  • trim – 是否去除尾部的b’\0’,默认去除

返回

返回生成的字节数组

change_mode(newmode='m')

在单进程与多进程模式之间切换,原来的内容会被复制到新的共享数组中,因为windows平台上只有单进程模式,这个函数在windows上并不存在,其它进程或者线程无法感知这种改变

参数

newmode – 需要切换的模式,’m’ 或者 ‘multiprocessing’ 是多进程模式, ‘s’ or ‘singleprocessing’单进程模式. 默认值是多进程模式

返回

get_bytes(trim=True) bytes

原子获取字节数组值,:参数 trim:为真时,去除结尾的b’\0’, 默认值为真

返回

字组数组当中所有的字节

get_int() int

返回字组数组的整型表示, 整个数组将被认为是一个大的整数

返回

整形表示

property int_value: int

与get_int一致

resize(newlength: int, paddingdirection: str = 'right', paddingbytes: bytes = b'\x00', trimming_direction: str = 'right')

截短或者补齐原始字节数组至新长度,新长度应该不长于8字节,原始数组会被一个新数组取代,如果这个数组被其它线程进程共享,其它线程或者进程将不知情

参数
  • newlength – 原始字组的预期新长度

  • paddingdirection – if longer than original, left or right sidethe original bytes should be padded, by default right side,use ‘right’ or ‘r’ to specify right side, use ‘left’ or ‘l’ to specify the left side.

  • paddingbytes – 补齐原始字节所需要的字节,默认是b’\0’,可以是多个字节组合像是b’ab’,会循环补足直到凑齐预期长度。

  • trimming_direction – 如果长度比原来短,应该是在左边还是右边字符数组应该被截短,’right’ 或者是 ‘r’表示右边,’left’或者是’l’表示左边

返回

set_bytes(data: bytes)

设置字节数组的值,如果长于以前的空间大小,会拓展数组,失去操作的原子性,原始长度可以用self.size查看。

参数

data – 输入字节数组

返回

property value

与无截短的get_bytes和set_bytes函数一致