我有一个文件,我知道它正好是 7168 行。在各种情况下,我得到虚假的行数。举个例子:
file = open("testfile", 'r')
count = 0
for line in file:
count += 1
print "count: " + str(count)
此代码导致:“计数:1098 ”
file = open("testfile", 'r')
count = 0
for line in file:
count += 1
print line ### this line is the only difference
print "count: " + str(count)
此代码导致:“计数:7168 ”
我唯一能想到的就是我在某个地方的内存不足。“testfile”的人口来自后台的一个 Popen。想法/希望是在用户到达脚本中需要完成转储的点之前,在后台将所有需要的数据转储到文件中。如果用户到达脚本中需要 testfile 内容的位置,但 Popen 尚未完成,我运行以下代码:
notified = False
while (os.path.getsize("testfile") == 0):
if notified == False:
print "Please hold, still dumping uids..."
notified = True
print "done!"
怀疑os.path.getsize
立即调用无数次可能是有害的,我修改了我的代码:
notified = False
while (os.path.getsize("testfile") == 0):
if notified == False:
print "Please hold, still dumping uids..."
notified = True
time.sleep(3) ### Delay 3 seconds
print "done!"
在这种情况下,我的行数为6896(这要好得多,但仍然不是真正的计数)
进一步修改:
notified = False
while (os.path.getsize("testfile") == 0):
if notified == False:
print "Please hold, still dumping uids..."
notified = True
time.sleep(5) ### Delay 5 seconds
print "done!"
现在我的行数按预期显示为7168 。
谁能向我解释发生了什么,以及如何以更高的效率实现我的目标?总体目标是,我的脚本需要在脚本稍后的某个时间点将大量数据转储到文件中。为了减少用户停机时间,我的 Popen 在脚本一开始就在后台运行。这while (os.path.getsize("testfile") == 0)
条线是为了防止竞争条件。