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?
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?