字符串API

模塊shared_atomic

class shared_atomic.atomic_string.atomic_string(initial: str, mode: str = 'singleprocessing', length: Optional[int] = None, paddingdirection: str = 'right', paddingstr: str = ' ', trimming_direction: str = 'right', encoding='utf-8')

原子字符串提供原子操作,不應該超過8字節

字符串的構造函數,字符串不能超過8字節

參數
  • initial – 字符串的初始值,如果初值長於8字節,必須截短多餘字節,必須指定目標長度,否則會失敗。

  • mode – 字符串的共享模式,』singleprocessing’或者’s’是單進程模式,』multiprocessing’或者’m’是多進程模式在windows平臺上只支持單進程模式,設成’multiprocessing’或者’m’會被忽略。

  • length – 補齊或截短的預期長度,如果不指定,不會進行補齊或截短,用原始值。

  • paddingdirection – 字符串應該是從左邊還是右邊應該補齊,』right』 或者 『r’代表右邊,』left』 或者’l’代表左邊

  • paddingstr – 補齊原始字節所需要的字符串,默認是』\0』,可以是多個字節組合像是’ab』,會循環補足直到湊齊預期長度。

  • trimming_direction – 如果初始字符串過長,應該在哪邊字節應該被截短。默認是右邊,』right』 或者 『r’代表右邊,』left』 或者’l’代表左邊

change_mode(newmode='m')

在單進程與多進程模式之間切換,原來的內容會被複制到新的共享數組中,因為windows平臺上只有單進程模式,這個函數在windows上並不存在,其它進程或者線程無法感知這種改變

參數

newmode – 需要切換的模式,』m』 或者 『multiprocessing』 是多進程模式, 『s』 or 『singleprocessing’單進程模式. 默認值是多進程模式

回傳

get_string()

Get the string atomically

回傳

the string

reencode(newencode: str)

修改字符串的編友,如果原始大小不夠,應該延長字符串,如果7個字節還不夠,它會失敗。

參數

newencode – 新編碼,像’utf-8』, 『utf-16-le』

回傳

resize(newlength: int, paddingdirection: str = 'right', paddingstr: str = ' ', 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.

  • paddingstr – string to pad to the original bytes, by default 『\0』 can be multiple string like 『ab』, will be padded to the original bytes in circulation until the expected length is reached.

  • trimming_direction – 如果長度比原來短,應該是在左邊還是右邊字符數組應該被截短,』right』 或者是 『r’表示右邊,』left’或者是’l’表示左邊

回傳

set_string(data: str)

設置字符串的值,如果長於以前的空間大小,會拓展數組,失去操作的原子性,原始長度可以用self.size查看。

參數

data – 輸入字符串

回傳

string_compare_and_set(i, n: str) bool

原子比較和設置,比較自身和i的內容,如果相等,這個過程就是讀-修改-寫的操作,將n的內容寫入自身,如果不相等,是隻讀操作,自身的內容寫入i.

參數
  • i – 與之比較的字符串

  • n – 當返回真值時,設入自身的另一個字符串

回傳

如果自身與i相等,返回真,否則反回假。

string_get_and_set(data: str) str

原子獲取和設置

參數

data – 新數據

回傳

原始字符串

string_shift(i, j)

3個指針之間兩兩交換值, initial_length字段也會被更新但非原子操作,將自己的值存入j然後將i存入自身

參數
  • i – 一個原子字符串

  • j – 另一個原子字符串

回傳

string_store(i)

原子地從另一個字符串存入這個字符串,如果兩個字符串佔的空間大小不一樣函數會失敗

參數

i – 將存入自己值的另一個字符串

回傳

property value

與get_string和set_string一致