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()。
输入
| 参数 |
|---|