ano*_*ode 4 python shelve python-3.x macos-high-sierra
我只是按照书中给出的一个例子来说明shelve
macOS High Sierra上的Python 模块.
如下所示,只有两个短串的小元组存储在架子中.正如您在最后一行中看到的那样,生成的文件大小为16兆字节.
当我在macOS High Sierra上尝试使用Homebrew安装的Python版本(3.6.4或2.7.14)时,生成的文件只会变得那么大.如果我在Linux主机上运行它,或者使用预先安装的Python版本(2.7.10)或通过macOS中的官方安装程序安装Python 3.6.4,那么生成的addresses
文件只有几千字节,就像其他人报告的一样.在评论中(谢谢!).
~/tmp> rm addresses
~/tmp> python3
Python 3.6.4 (default, Jan 6 2018, 18:43:09)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
[...]
>>> import shelve
>>> book = shelve.open("addresses")
>>> book['flintstone'] = ('fred', '555-1234', '1233 Bedrock Place')
>>> book['rubble'] = ('barney', '555-4321', '1235 Bedrock Place')
>>> book.close()
>>>
~/tmp> ll
total 32768
-rw-r--r-- 1 moritz staff 16M Jan 24 13:05 addresses
Run Code Online (Sandbox Code Playgroud)
我可以确认这个行为是由gdbm 1.14引入的,gdbm是用来shelve
访问数据库文件的库.
通过更改2e8a5e0,gdbm将尝试扩展文件大小以匹配next_block_size
.next_block_size
计算方法是4 * block_size
,通过stat.st_blksize
返回获得stat(2)
的底层文件系统的最佳I/O块大小.在我的macOS 10.13.3上,SSD卷上的APFS上的文件stat.st_blksize
是4194304字节,next_block_size
是16777216字节,因此init db文件大小是16MB.
ps:我在手上检查了HDD卷上的HFS + fs,st_blksize
值为4096字节.
归档时间: |
|
查看次数: |
133 次 |
最近记录: |