LineProcMirror
类私有上下文源码
pbuf: syncstream.LineProcBuffer
buffer = pbuf.mirror
with buffer:
...
进程安全缓存的镜像。
危险
该mirror由LineProcBuffer
初始化,且用于管理要写入到buffer的行数据。用户不需要、也不应使用该类来实例化对象。请总是使用pbuf.mirror
来获取mirror对象。
别名
该类可以按以下方式之一获取
import syncstream
syncstream.LineProcMirror
syncstream.mproc.LineProcMirror
参数
参数 | 类型 | 必选 | |
---|---|---|---|
q_maxsize | int | 队列的最大长度。该值和queue.qsize 意义相同。 | |
aggressive | bool | 若设为True ,则启用积极模式,亦即是说,只要有新的数据写入该 mirror,就会立即传递给缓存。若设为False ,则只会在新写一整行的时候、才传递给缓存。 | |
timeout | int | None | 网络同步事件的时限。该值和queue.put(timeout) 的参数意义一致。 | |
_queue | Queue | None | 用来与缓存通信的队列。该对象是一个multiprocessing.Queue() 、或由multiprocessing.Manager() 给出。队列对象由LineProcBuffer 构造。 | |
_state | dict[str, Any] | None | 由multiprocessing.Manager() 给出的共享状态字典。该字典对象由 LineProcBuffer 构造。 | |
_state_lock | Lock | None | 状态字典的读/写锁。由multiprocessing.Manager() 给出。该锁对象由LineProcBuffer 构造。 |
方法
close
buffer.close(exc: BaseException | None = None)
关闭 IO。该方法只会生效一次。第二次调用则无任何效果。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
exc | BaseException | 若exc 非None ,则在关闭缓存前调用send_error() 。否则,调用send_eof() 。 |
clear
buffer.clear()
清空临时缓存。
该方法会清空mirror的临时缓存。若mirror按aggresive
模式工作,则临时缓存不会用到。在此情形下,该方法将不会对mirror产生任何影响。
该方法是线程安全的。且不同进程的镜像并不会共享相同的临时缓存。且需要注意的是,该方法不会清空共享队列的内容。
new_line
buffer.new_line()
清空当前的临时缓存,并人为地触发一个“新行”信号。若当前的临时缓存包含数据,则会先将数据移动到存储区,然后再创建新行。若当前的临时缓存的已经是新行,则不做任何处理。
该方法等价于
if buffer.last_line.tell() > 0:
write('\n')
flush
buffer.flush()
刷新当前正在写入行的数据流(临时缓存)。
send_eof
buffer.send_eof()
发送安全关闭信号。
应当在子进程的结尾使用该信号。该方法用来通知缓存子进程的工作已经安全完成。
危险
- 在每个子进程的结尾,应当总是使用
send_eof()
或send_error()
。否则,主线程(的缓存)有可能造成死锁。 - 在每个子进程的结尾,应当只使用一次
send_eof()
或send_error()
。例如,若调用过send_error()
,则不应再调用send_eof()
。从同一子进程发送超过一个关闭信号,可能引发严重故障。
send_error
buffer.send_error(error: BaseException)
向主缓存发送异常对象。
发送缓存过的异常对象。该方法需要用于try / except块中。错误对象将会在主缓存中捕获为一条信息。
危险
参见send_eof()
。
输入
参数 |
---|