0

バッチメッセージをSQSに送信する次のコードがあります。 私の目標は1000 msg/secをループに入れてwhile trueにすることです。SQSに1000 msg /秒以上のスピードを達成する方法は?

ボトルネックがあります。私はCSVファイルからランダムなIDを選択しています。目標を達成するためにアルゴリズムをどのように改善できますか?

async def send_to_sqs(file_path, loop): 
    ids = load_file_to_list(file_path) 
    while True: 
     messages = [] 
     for id in ids: 
      message = {'Id': id} 
      messages.append(message) 

     for i in range(0, 10000, 10): #butch size is 10 
      messages_batch = messages[i:i+10] 

      entries = [] 
      for message in messages_batch: 
       entries.append({'Id': str(message['Id']), 
       'MessageBody': json.dumps(message)}) 
      await sqs.send_message_batch(QueueUrl=sqs_url, Entries=entries) 


def load_file_to_list(file_path): 
    with open(file_path, 'r') as f: 
    reader = csv.reader(f) 
    return list(reader) 
+0

ボトルネックを見つけるためにベンチマークしましたか?実時間と比較して実行中にプログラム全体に必要なCPU時間を確認しましたか?要求とHTTPSオーバーヘッドに署名するには、かなりのCPU時間が必要です。 –

答えて

4

なぜUUIDを使用しないのですか?これは、あらかじめ作成したファイルのランダムIDよりも一意である可能性が高い

コードをより直接的に解決するために、一歩前倒しすることなく、ファイルをバックグラウンドで永続的に開いたままにすることを検討しますあなたがあなたの関数を呼び出すたびにそれを開くよりも。

2

whileループを開始する前に、CSVファイルのすべてのランダムIDをメモリに集めてみます。そうすれば、ループはファイルを開いて乱数を取得する必要はありません。次に、メモリに保持されている乱数のリストから乱数を選択する関数を書くことができます。これは物事をスピードアップします。

関連する問題