跳到主要内容
版本:1.2.2

LineHostReader

上下文装饰器源码

reader = LineHostReader(
address: str, timeout: int | None = None,
)

with reader:
...

@reader
def func(): ...

用来读取网络服务缓存(host.LineHostBuffer)的读取器。

该类仅仅用作读取某个特定服务内容的方便API。其提供了用来读取缓存内容、和服务状态的功能,但不提供任何用来覆写缓存、或更新状态的功能。建议读者将该类的实例作为上下文使用,以便限定HTTP连接的作用域。

别名

该类可以按以下方式之一获取

import syncstream


syncstream.LineHostReader
syncstream.host.LineHostReader

参数

参数类型必选
说明
addressstrLineHostBuffer的地址。将会从该特定的服务读取数据。
timeoutint | None网络同步事件的时限。若不设置,则执行同步操作将持续阻塞当前进程。

方法

clear

flag: bool = reader.clear()

清空整个缓存。

该方法会清空该缓存内的整个存储空间,以及当前正在写的最后一行的流。然而,该方法不会清空该缓存的任何镜像或拷贝。该方法是线程安全的,且应当永远可以成功执行。

输出

参数类型
说明
flagbool若删除成功,返回True。若删除遭到了拒绝,返回False。若服务端有任何异常,抛出错误。

reset_states

flag: bool = reader.reset_states()

重置缓存的状态。

若需要复用缓存,则应当调用该方法。

输出

参数类型
说明
flagbool若重置成功,返回True。若重置遭到了拒绝,返回False。若服务端有任何异常,抛出错误。

stop_all_mirrors

flag: bool = reader.stop_all_mirrors()

向所有的mirror发送中断信号。

该操作用于安全中断进程。它并不能保证进程会立刻结束。针对每个mirror,在每次要写信息的时候,检查中断信号。

若用户打算使用该方法,请确保在进程中捕获了StopIteration。该异常不会回送到缓存中。

输出

参数类型
说明
flagbool若中断成功,返回True。若中断遭到了拒绝,返回False。若服务端有任何异常,抛出错误。

read

lines: tuple[str | GroupedMessage, ...] = reader.read(size: int | None = None)

读取信息。

从缓存中获取所存储的各项记录。read()方法是线程安全的,并且不会干扰write()方法的指针。

若当前正在写入的行不为空,调用该方法时,则会将其视为最后一条记录。

输入

参数类型必选
说明
sizeint | None若设为None,则会返回整个存储区。若设为一个整数,则会返回最后size条信息。

输出

参数类型
说明
linestuple[str | GroupedMessage, ...]所获取的多项记录信息。结果按照先入先出的顺序排序。

属性

headers

headers: ChainMap[str, str] = reader.headers

发送GET请求时,网络连接的默认请求头。


headers_post

headers_post: ChainMap[str, str] = reader.headers_post

发送POST请求时,网络连接的默认请求头。


maxlen

maxlen: int = reader.maxlen

获取缓存的最大长度。


closed

is_closed: bool = reader.closed

检查服务是否已经关闭。

运算符

__len__

n_buffer_items: int = len(reader)

获取缓存的当前长度。

范例

使用reader读取服务器的数据和状态

使用LineHostBuffer来启动一个带有空缓存的服务。

start_a_server.py
import flask
import syncstream


app = flask.Flask('test')
syncstream.LineHostBuffer(api_route='/sync-stream', maxlen=10).serve(app)


if __name__ == '__main__':
app.run('localhost', port=5000)