原子字節數組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函數一致