joblib 转储写入 0 字节文件

joblib dump writes 0 byte file

joblib.dump 似乎对我没有任何作用。可能我遇到了一些版本冲突或其他问题。感谢任何帮助。

我的作业库版本:0.13.2
似乎也影响 0.14.0

重现:

import joblib
import os

foo = open("bar", "w+b")
joblib.dump("test", foo)
print(os.stat("bar").st_size)

#prints 0... expect the size of a file containing the pickled string "test" > 0 bytes

缓冲区尚未写入磁盘,因此文件已创建但没有内容。您必须刷新内部缓冲区,然后将内容写入文件:

>>> foo = open("bar", "w+b")
>>> joblib.dump("test", foo)
>>> foo.flush()
>>> print(os.stat("bar").st_size)
14

或者使用自动执行此操作的上下文管理器:

>>> with open("bar", "w+b") as foo:
>>>     joblib.dump("test", foo)
>>> print(os.stat("bar").st_size)
14

或者您可以禁用缓冲:

>>> foo = open("bar", "w+b", buffering=0)
>>> joblib.dump("test", foo)
>>> print(os.stat("bar").st_size)
14

也可以在这里看看:How often does python flush to a file?