特定の関数「foo」を毎秒実行しようとしています。私はこれを数分間しなければなりません(たとえば5)。
関数foo()は、サーバーに対して100個のHTTPリクエスト(JSONオブジェクトを含む)を作成し、JSONレスポンスを出力します。
つまり、1秒あたり100件のHTTPリクエストを5分間行う必要があります。
私はPythonを学び始めたばかりなので、幅広い知識はありません。これは私が試したことです:
import threading
noOfSecondsPassed = 0
def foo():
global noOfSecondsPassed
# piece of code which makes 100 HTTP requests (I use while loop)
noOfSecondsPassed += 1
while True:
if noOfSecondsPassed < (300) # 5 minutes
t = threading.Timer(1.0, foo)
t.start()
複数のスレッドがあるため、関数fooは300回呼び出されませんが、それよりはるかに多く呼び出されます。私もロックを設定してみました:
def foo():
l = threading.Lock()
l.acquire()
global noOfSecondsPassed
# piece of code which makes 100 HTTP requests (I use while loop)
noOfSecondsPassed += 1
l.release()
残りのコードは、前のコードスニペットと同じです。しかし、これも機能しません。
どうすればよいですか?
編集:異なるアプローチ
私は私のために働いたこのアプローチを試しました:
def foo():
noOfSecondsPassed = 0
while noOfSecondsPassed < 300:
#Code to make 100 HTTP requests
noOfSecondsPassed +=1
time.sleep(1.0)
foo()
そうすることの不利な点はありますか?