为什么 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()
代码如下:
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()