正確に 7168 行であることがわかっているファイルがあります。さまざまな条件下で、偽の行数が表示されます。たとえば、次のようにします。
file = open("testfile", 'r')
count = 0
for line in file:
count += 1
print "count: " + str(count)
このコードの結果: "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)
このコードの結果: "count: 7168 "
私が考えることができる唯一のことは、どこかでメモリが不足していることです。「testfile」の母集団は、バックグラウンドで Popen から取得されます。アイデア/希望は、ユーザーがスクリプト内の完全なダンプを必要とするポイントに到達する前に、必要なすべてのデータをバックグラウンドでファイルにダンプすることです。ユーザーがテストファイルのコンテンツが必要なスクリプトのポイントに到達したが、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)
行は、競合状態を防ぐためのものです。