2016-09-14 10 views
0

curlコマンドを使用してWebサーバーの負荷テストを実行しようとしています。複数のcurlコマンドからの平均応答時間をPythonを使用して計算する

私は、複数のカールのコマンドを実行することですが、今、私はまた、どのようにすることができ

from functools import partial 
from multiprocessing.dummy import Pool 
from subprocess import call 

commands = [] 
command = "curl -s -w \"Time:%{time_total}\n\" -o /dev/null -k -X GET \"https://google.com\"" 
for i in range(10): # run 10 curl commands in total 
    commands.append(command) 

pool = Pool(5) # Nummber of concurrent commands at a time 
for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): 
    if returncode != 0: 
     print("%d command failed: %d" % (i, returncode)) 

出力

Time:0.654 
Time:0.689 
Time:0.720 
Time:0.725 
Time:0.735 
Time:0.624 
Time:0.635 
Time:0.633 
Time:0.678 
Time:0.708 

実行されたすべてのcurlコマンドからの平均応答時間を計算しますTimeをキャプチャし、平均応答時間を計算しますか?

おかげ代わりにあなたがimapで実行される別の関数を作成することができcallに頼るの

答えて

1

。次に、子プロセスと通信できるようにPopenを使用できます。以下の例では、キャプチャされ、親プロセスに返されるstdoutにのみ時間を書き込みます。

from functools import partial 
from multiprocessing.dummy import Pool 
from subprocess import Popen, PIPE 

def child(cmd): 
    p = Popen(cmd, stdout=PIPE, shell=True) 
    out, err = p.communicate() 
    return out, p.returncode 

commands = [] 
command = "curl -s -w \"%{time_total}\" -o /dev/null -k -X GET \"https://google.com\"" 
for i in range(10): # run 10 curl commands in total 
    commands.append(command) 

pool = Pool(5) # Nummber of concurrent commands at a time 

times = [] 
for i, (output, returncode) in enumerate(pool.imap(child, commands)): 
    if returncode != 0: 
     print("{} command failed: {}".format(i, returncode)) 
    else: 
     print("{} success: {}".format(i, output)) 
     times.append(float(output)) 

print 'Average: {}'.format(sum(times)/len(times) if times else 0) 

出力:

0 success: 0.109 
1 success: 0.108 
2 success: 0.103 
3 success: 0.093 
4 success: 0.085 
5 success: 0.091 
6 success: 0.109 
7 success: 0.114 
8 success: 0.092 
9 success: 0.099 
Average: 0.1003 
+0

素晴らしいです! :) –

関連する問題