1
onesuper OP 请问有人碰到过这种情况么?
|
2
zhuzhuor 2012-04-12 21:54:27 +08:00 via iPad
文件io有缓存的,猜测可能虽然运行到最后一行了,但是后台还没把1g多的文件全写到硬盘里呢
|
3
onesuper OP @zhuzhuor 恩,比如我在一个while循环中不断调用write,这期间都不会发生IO,直到我调用了close()以后才会把内存中的文件写到硬盘上,是这个意思么?
|
4
zhuzhuor 2012-04-13 10:19:10 +08:00
@onesuper 嗯 应该是。你程序退出的时候系统也会把缓冲里面的数据全都保存下来,我猜测程序虽然看似运行到最后一行,但是数据还没全保存好呢
你查查文件io有没有flush函数,写一点然后flush一下看看程序是怎么运行的(虽然这样会造成程序效率比较低) |
5
onesuper OP @zhuzhuor 但是我发现其实那个文件已经已经写完了,但是python解释器还是陷入了无止境(感觉上)的等待
现在我让while每循环10000次就flush一下,然后文件开始慢慢地变大,结果发现等文件全部写完、程序执行到最后一行还是死了 数据量小的时候没有问题,数据一大就碰到这个问题了 |
6
zhuzhuor 2012-04-13 15:31:12 +08:00
@onesuper 汗,那就不清楚了。推荐你换pypy做interpreter试试看是不是还有问题,另外运行速度也应该能提高一些
|
8
likuku 2012-04-13 19:13:06 +08:00 via iPhone
以前也做过类似的,貌似没碰到这问题。不知道你的输出到文件那段是怎么写的?另外,运行平台是什么OS,什么FileSystem?
|
9
gujiaxi 2012-04-13 19:31:06 +08:00
程序卖萌……
|
10
onesuper OP @likuku OS=debian FS=ext3
i = 0 while i < len(start): outfile.write(str(start[i]) + '\t') outfile.write(str(width[i]) + '\n') i += 1 start有60M个数据。刚刚吃个饭回来发现还是没有返回,但文件确实已经写好了。 |
12
likuku 2012-04-13 21:20:42 +08:00
|
13
onesuper OP @likuku 我想尽快能用上转好了的格式,所以就用python写了个脚本,没有考虑效率问题(占内存小的方法一定是有的),没想到出了这个茬子,觉得挺奇怪的就上来问问
刚刚看了一下,python占内存最高的时候是3G/4G。。。难道这个问题是因为swap in/out 导致的么? |
15
likuku 2012-04-14 14:06:41 +08:00 via iPhone
|
16
silverbullettt 2012-04-26 23:45:43 +08:00
我是来顶LZ的……文件对象close了吗?
|