字符串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一致