为什么 os.path.getmtime() 总是 运行 两次?这没有任何意义

Why is os.path.getmtime() always running twice? It does not make any sense

代码如下:

import os
import asyncio
async def func_placing_sell_orders():
    prev_final_stocks_list_state = os.path.getmtime('stock_data//final_stocks_list.json')
    print('i run once')
    while True:
        if (prev_final_stocks_list_state != os.path.getmtime('stock_data//final_stocks_list.json')):
            prev_final_stocks_list_state = os.path.getmtime('stock_data//final_stocks_list.json')
            print('here')

asyncio.get_event_loop().run_until_complete(func_placing_sell_orders())

简化版:

import os
def simple():
    state = os.path.getmtime('file.json')
    print('i run once')
    while True:
        if (state != os.path.getmtime('file.json')):
            state = os.path.getmtime('file.json')
            print('here')

simple()

这是打印出来的:

i run once
here
here

此处,每次保存文件时都会打印两次。我 运行 检查之前和当前修改时间之间的时间,它总是不同的,这意味着每次保存应该只 运行 一次。

这太基础了,我不明白为什么会得到这个结果。请发送帮助

如果文件足够大,可能第一个 "here" 是在文件仍在编写编辑时,最后一个 "here" 是在保存完成之后。此外,如果您使用 open("file", "w") 或类似的东西来编写编辑,文件将首先被清理(第一个 "here"),然后使用新数据进行编辑(第二个 "here" )

您可以使用简单的计时器忽略太快的报告 (<1s)

lastEdit = time.time()
while True:
    if (state != os.path.getmtime('file.json')):
        state = os.path.getmtime('file.json')
        if time.time()-lastEdit > 1: 
            print('here')
        lastEdit = time.time()