2017-05-19 7 views
1

私は自分のAPIのストレステストをする必要があります。 また、私は私の要求にいくつかのデータを入れて、代わりにヘッドのPOSTを送信するためにthat exampleを修正:Pythonを使用して1秒当たり1k POST HTTPリクエストをデータと共に送信するには?

count = int(sys.argv[1]) 
url = "http://api.example.com/" 
test_id = datetime.now().strftime("%H%M%S%f") 
data = [] 
for i in range(count): 
    req_data = { 
     'test_id': test_id, 
     'param1': i, 
     'param2': 'aaa', 
     'param3': 'bbb', 
    } 
    data.append(req_data) 

start_time = time.time() 
res = grequests.map(grequests.post(url, data=data[i]) for i in range(count)) 
sending_time = time.time() - start_time 
print(sending_time) 

そのパフォーマンスは毎秒5の要求に低下した後に! また、すべての回答をthat questionから試しても同じ結果が得られました。 1000 req/secに達するのは本当ですか?

+0

もちろん、POSTでは、HEADよりもはるかに多くの処理がWebサーバーで必要になります。 Webサーバーは並行要求をどれくらいうまく処理していますか?より多くの労働者を使用するように設定できますか?それは*労働者を使用していますか? POSTに切り替えることで、質問の範囲にサーバーとクライアントの処理が含まれるようになりました。 – PaulMcG

+0

私はTwistedをサーバー側で使用しています –

+0

サーバーが1000req /秒を処理できるように注意してください。クライアントコードはボトルネックではありません。 Twistedを使うだけで魔法の杖ではありません。ハンドラを複数のDeferredに分割して、処理とI/Oを同時に並行して要求と重複させる必要があります。 – PaulMcG

答えて

0

はい、これを行うことができます。

これは、複数のプロセスとスレッドを作成することで実現できます。

Ex。サブプロセスの使用

ここでは10個のサブプロセスを作成し、それぞれ100個の要求を行います。だから1秒で1000リクエストを実行することができます。

import subprocess 

for i in range(10): 
    subprocess.Popen(["python","pathToPythonScript/stressTesting.py","100"]) 
+0

誰でもこの回答の問題点を教えてもらえますか?私の知識を増やすことができるように、ここにコメントを書いてください。 –

+0

10個のサブプロセスがそれぞれ1秒以内に100個の要求を行うためではありません。また、最初の質問はgrequestsとおそらくasyncioについてですが、これはこれよりはるかに高速になるでしょう。 –

+0

私はasyncioについてよく分かりませんが、これで100に近い値に達することができます。メモリや処理能力の問題がなければ、カウンタを10から15に増やすことができます。私はこれが問題の解決策であり、適切な解決策ではないことを知っています。しかし、私はasyncioを紹介してくれてありがとう。 –

関連する問題