序列化能力#
作为 Dask 项目的一部分,文件系统实例的可序列化性是一个重要设计决策,这样它们就可以在一个进程(例如,客户端)中创建并用于其他进程(通常是工作进程)。这些其他进程甚至可能位于其他机器上,因此在许多情况下,它们需要能够重新建立凭据,理想情况下不需要在 pickled 二进制数据中传递敏感令牌。
一般来说,fsspec
实例遵循这些规则,不包括锁、文件和其他线程相关的材料,并且尽可能使用本地凭据(如令牌文件)来在反序列化时重新建立会话。(同时利用缓存的实例,如果存在的话,请参阅下文)。
fsspec.core.OpenFile
#
fsspec.core.OpenFile
类提供了一种方便的方式来指定打开某些文件(本地的、远程的、在压缩存储中的等)的方式,这种方式是可移植的,并且还可以对文件应用任何压缩和文本模式。这些实例也是可序列化的,因为它们不包含任何打开的文件。
使用 OpenFile
的方法是在 with
上下文中隔离交互。实际上是上下文的初始化完成了创建类似文件的实例的工作。
of = fsspec.open(url, ...)
# of is just a place-holder
with of as f:
# f is now a real file-like object holding resources
f.read(...)