文件似乎在创建之前就被加上了时间戳
File seems to be timestamped before it is created
以下测试总是失败(这在 linux 系统上运行,问题与其他操作系统无关):
from time import time
from decimal import Decimal
from pathlib import Path
def test_timing():
start = Decimal(time())
p = Path(__file__).parent / 'testfile.txt' # does not yet exist
p.touch()
mt = p.stat().st_mtime
p.unlink() # unlinked before the failing assert
> assert start <= mt
E AssertionError: assert Decimal('1640930671.75709438323974609375') <= 1640930671.7534654
差距总是大约 3 到 7 毫秒。
Decimal(time())
开始 returns 的时间戳怎么可能比在它之后两行创建的文件 晚?
python 时间戳和 linux' 之间是否有偏移? python 是否会在 Decimal(time())
调用完成之前继续创建文件?我在这里错过了什么?
编辑:我应该提到它是 ext4 文件系统。
ext4 文件系统使用 current_fs_time
获取内核时间戳。为了提高效率,内核时间戳是一个缓存值,仅在调度程序间隔时更新,大约为 10 毫秒。所以,当它被存储时,时间可能已经过去了 10 毫秒。
附带说明一下,将时间戳转换为 Decimal
没有意义。来自 C 的值是一个双精度值,它只包含大约 17 位数字。这意味着您可以精确到微秒。转换为 Decimal
不会获得任何额外的精度;其他数字基本上是随机的。
以下测试总是失败(这在 linux 系统上运行,问题与其他操作系统无关):
from time import time
from decimal import Decimal
from pathlib import Path
def test_timing():
start = Decimal(time())
p = Path(__file__).parent / 'testfile.txt' # does not yet exist
p.touch()
mt = p.stat().st_mtime
p.unlink() # unlinked before the failing assert
> assert start <= mt
E AssertionError: assert Decimal('1640930671.75709438323974609375') <= 1640930671.7534654
差距总是大约 3 到 7 毫秒。
Decimal(time())
开始 returns 的时间戳怎么可能比在它之后两行创建的文件 晚?
python 时间戳和 linux' 之间是否有偏移? python 是否会在 Decimal(time())
调用完成之前继续创建文件?我在这里错过了什么?
编辑:我应该提到它是 ext4 文件系统。
ext4 文件系统使用 current_fs_time
获取内核时间戳。为了提高效率,内核时间戳是一个缓存值,仅在调度程序间隔时更新,大约为 10 毫秒。所以,当它被存储时,时间可能已经过去了 10 毫秒。
附带说明一下,将时间戳转换为 Decimal
没有意义。来自 C 的值是一个双精度值,它只包含大约 17 位数字。这意味着您可以精确到微秒。转换为 Decimal
不会获得任何额外的精度;其他数字基本上是随机的。