簡體   English   中英

Python os.listdir() 不返回某些文件

[英]Python os.listdir() doesn't return some files

我有一個 python function 使用os.stat()檢查文件夾的修改時間,然后它對該文件夾執行os.listdir()

我有另一個進程在被檢查的文件夾中創建文件。 有時會觀察到三個文件使用相同的時間戳創建,並且文件夾的 stat 也具有相同的時間戳。

當 python function 在同一毫秒內獲取文件時,觀察到os.listdir()僅提供 3 個創建文件中的 2 個。 為什么會這樣?

環境是:

操作系統:紅帽企業 Linux 服務器版本 7.6

Python 版本:Python 3.6.8

文件系統:xfs

示例代碼

import os
import sys
import time

filelist=list()
last_mtime=None


def walkover():
    path_to_check="/path/to/check"
    curr_mtime=os.stat(path_to_check).st_mtime_ns
    global last_mtime
    global filelist
    if last_mtime == None or curr_mtime > last_mtime:
        for file in os.listdir(path_to_check):
            if file not in filelist:
                filelist.append(file)
        last_mtime = curr_mtime
        print ("{} modified at {}".format(path_to_check, last_mtime))


調用 function 來維護某個時間點的文件列表。 存在 if 情況以避免多次os.listdir()調用。

編輯:

這些文件是“.rsp”文件,當“.o”即將構建時由忍者創建。

由於我的機器有多個內核(16),忍者是從 cmake 用“--parallel 16”觸發的。 這將導致 16 次編譯並行發生。

我不知道這個忍者的事情,但在我看來,當編寫第一個“.rst”文件並運行 walkover function 時,幾乎同時執行 walkover function 可能會在創建其他文件時丟失。 無論是緩沖區還是隊列或其他什么,特別是當並行進程正在運行時,事件的順序可能很難掌握。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM