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/cn.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灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP