Python 板


LINE

我想寫測試硬碟效能的程式,主要在win7 和win xp跑 希望能保證"實際"對檔案做讀取動作,完全關閉任何系統快取 我遇到的問題是開啟檔案時,如果該檔先前有過讀寫動作時 python 中利用os.open() 或open() fd.read()時,OS並不會直接打開檔案讀出來 而是在 DRAM 中快取直接拿快取資料,造成發大量的讀寫硬碟卻沒有實際動作 試過這樣沒用 with open(copying_target_path, 'rb', buffering = 0) as fd: 避掉 FILE_SHARE_WRITE 好像也沒用 高手大大救命 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.235.222.156
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Python/M.1407846340.A.58C.html
1F:推 LiloHuang: 恐怕得直接用 ctypes 或者 pywin32 呼叫 CreateFileW 08/12 20:45
2F:→ LiloHuang: 搭配FILE_FLAG_WRITE_THROUGH, FILE_FLAG_NO_BUFFERING 08/12 20:46
3F:→ LiloHuang: 我剛瞧了一下 Python 2.7 的源碼,並無以上的實作釋出 08/12 20:47
4F:→ LiloHuang: 順便附上 MSDN 重要的說明片段,http://goo.gl/pc4Dlt 08/12 20:48
5F:推 ckc1ark: http://tinyurl.com/kqvvzln 試試 08/12 20:52
6F:推 LiloHuang: 剛剛看到有一條路可以用...應該算是隱藏的後門 XD 08/12 20:55
7F:→ LiloHuang: from _multiprocessing import win32 之後 08/12 20:55
8F:→ LiloHuang: 就可以用 win32.CreateFile(...) 的 API 來設定 flag 08/12 20:56
9F:推 LiloHuang: 可參照 Python 官網原始碼來操作 http://goo.gl/xNBXVh 08/12 21:02
10F:→ LiloHuang: 只不過上面兩個常數沒有被寫進去,得查 header file 囉 08/12 21:03
11F:→ dctzeng: 太感謝 嗚嗚 ~~ 08/12 21:19
12F:→ dctzeng: 可以請教一下 中文路徑編碼 在 win32.CreateFile 失敗? 08/12 21:54
13F:推 LiloHuang: 真尷尬,剛剛去看了一下 DLLs\_multiprocessing.pyd 08/12 22:07
14F:推 LiloHuang: 該檔案的 Win32 PE Import Table 是寫 CreateFileA 08/12 22:09
15F:→ LiloHuang: 猜測 CPython 2.7 當初編譯時,沒有用 UNICODE 來編譯 08/12 22:10
16F:→ LiloHuang: 只能請樓主用 ctypes.windll.kernel32.CreateFileW 囉 08/12 22:10
17F:→ LiloHuang: 不然就只能用 win32.CreateFile(r'D:\中文字.txt', ... 08/12 22:23
18F:→ LiloHuang: Non-UNICODE 版本加減用 XD 只是這樣不是很好就是 08/12 22:24
19F:推 LiloHuang: 補充如果要自己重新編譯 Python Runtime 使其支援 XD 08/12 22:37
20F:→ LiloHuang: 除了得選 UNICODE 模式,PyArg_ParseTuple 也得改一下 08/12 22:38
21F:→ LiloHuang: 但是這不是一個很正常的方式,跟官方版本一致就好 08/12 22:40
22F:→ os653: 參考一下#1F2nhxPv,我想應該可以直接把ANSI版改成UNICODE 08/13 03:24
23F:→ dctzeng: 感謝樓上 該部會那篇是同行po的吧 XDDDD 08/13 23:11
24F:→ dctzeng: 今天才搞dll來開file, 原來有更好的解法 08/13 23:12
25F:→ dctzeng: python 有內建 fd.flush 跟os.fsync 我試只對write 有效 08/13 23:21
26F:→ dctzeng: read 還是一直打中cache 我就改從做dll來解問題 08/13 23:23
27F:→ dctzeng: 莫非FlushFileBuffers 跟fd.flush不同讓 #1F2nhxPv 有效? 08/13 23:25
28F:推 LiloHuang: 基本上呢該篇文章就是我第一個回應提到的,使用pywin32 08/13 23:43
29F:→ LiloHuang: 如果樓主願意安裝pywin32的話,那是一個很棒的選擇 :D 08/13 23:43
30F:→ LiloHuang: 至於 fd.flush 實作原始碼在這邊 http://goo.gl/uirMHF 08/13 23:44
31F:→ LiloHuang: 根據原始碼 file_flush 的實作,是使用 fflush 函式 08/13 23:46
32F:→ LiloHuang: fflush 是標準 C runtime 提供的能力,而呼叫 fflush 08/13 23:46
33F:→ LiloHuang: 並不會呼叫 Win32 API 的 FlushFileBuffers 08/13 23:47
34F:→ LiloHuang: 樓主也可以用 windbg 下中斷點測試 :D 應該不會hit才是 08/13 23:48
35F:→ LiloHuang: 畢竟 fflush 跟 FlushFileBuffers 使用的目的就不同 08/13 23:51
36F:→ LiloHuang: 而在這個狀況的確得使用 FlushFileBuffers 再搭配 08/13 23:51
37F:→ LiloHuang: 我先前的推文或該文章中所提及的那兩個 flag 才是正解 08/13 23:53
38F:推 LiloHuang: 然而 os.fsync 狀況就不同了,在視窗平台上會用_commit 08/14 00:04
39F:→ LiloHuang: _commit 會轉呼叫 FlushFileBuffers (可下斷點驗證) 08/14 00:04
40F:→ LiloHuang: 根據以上資訊 os.fsync 應該要清緩衝,也許可以再試試 08/14 00:08
41F:→ LiloHuang: 當然使用時,你的 fd 本身在建立時也得具備那兩個 flag 08/14 00:09
42F:→ dctzeng: 樓上大大感謝 可以請教您怎麼找到實作原始碼? 08/14 22:42
43F:推 LiloHuang: 關於 fd.flush 這才是對的版本 http://goo.gl/LQ6Wel 08/14 23:05
44F:→ LiloHuang: 上面那個連結我貼成 stackless 版,儘管內容幾乎一樣 08/14 23:05
45F:→ LiloHuang: 至於怎麼樣找原始碼? 官網就有提供下載整包源碼啦 :D 08/14 23:06
46F:→ LiloHuang: trunk 在這 http://svn.python.org/projects/trunk/ 08/14 23:07
47F:→ LiloHuang: http://svn.python.org/projects/python/trunk/ 更正.. 08/14 23:08
48F:→ LiloHuang: 要看特定版號就去官網首頁抓源碼,或在SVN找對應branch 08/14 23:11
49F:→ dctzeng: 喔~~ 感恩 我初入門python 學習了 08/14 23:33







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP