2010-12-01 19 views
0

これを実行しようとしています(ウェブサイト上のファイルにアクセスし、コンテンツを読み込み、終了するまでアクションを実行します)。前提条件は、再びWebサイトにアクセスする前にx秒を待たなければならないこと、内容を再確認する):Python:条件が真である限り、一定の時間間隔で繰り返し実行する

perform = True 
while(perform): 
data = urllib.urlopen('someurl') 
data = data.read() 
if(data == '0'): 
    dosomething() 
elif(data == '1'): 
    #1 signifies to exit the loop 
    perform = False 
else: 
    time.sleep(10) 

は、しかし、これは動作しているようですありません。 'Someurl'は常に価値があります。いくつかのGoogleは、それは睡眠機能と関係があると言います。助けてください!

+0

「常に値がありますか?」 –

+0

10ミリ秒ごとにサーバーを攻撃すると、数秒以内に完全にブロックされる可能性が非常に高いです(または、害虫であると判断する前に接続の合理的な遅れを許容します)。それからあなたは503かそのようなものを手に入れます。速度を落とす。 –

+0

@Chris Morgan:Pythonでは、time.sleepの引数は秒単位で、ミリ秒単位ではありません(浮動小数点数でもかまいません)。少なくとも2.xでは、とにかく。 –

答えて

2

この:

import time 
while True: 
    print "fetching" 
    time.sleep(10) 

は、最小限のテストケースであり、これは常に働くように、time.sleep機能

+0

さて、私が使用していたIDEで問題が特定されたようです。翼。あなたが提供したコードを使っても、決して出力は投げられませんでした。しかし、私がpyファイルを直接実行すると、完璧に動作します。奇妙な!しかし、とにかくありがとう:) – muddy

+0

あなたのIDEはおそらく出力をバッファリングしており、プログラムが終了したとき、またはバッファにある量のデータがあるときにそれを表示します。私はあなたがいくつかのファイルにログを書き込むことができると思う(とそのファイルをフラッシュ)。 –

1

1)あなたが実際にあなたが戻って得るものdataチェックしようとしていると問題になることはできませんURLを読んでから?それを印刷したり、何かを印刷したりしますか?

2)データが実際に '0'または '1'と一致する場合、elseケースには到達しないため、sleep()は発生しません。これは、すぐにデータをもう一度読み込もうとしているために悪いことです。おそらく変更されていないでしょうし、Webサーバーは通常、一時停止せずに何度も同じURLを繰り返し尋ねると(あなたがそれらをハックしようとしていると思います)、大変気に入らなくなります。解決方法:elseケースにsleep()コールを入れないでください。元のifと同じレベルにしてください。有効なコードを取得するためにelseは必要ありません。

関連する問題