0

Ich habe den folgenden Code, der eine Batch-Nachricht an SQS sendet. Mein Ziel ist es, 1000 msg/sec in while true Schleife zu senden.Wie erreiche ich eine Geschwindigkeit von mehr als 1000 msg/sec zu SQS?

Ich habe einen Engpass - wählen Sie zufällige IDs aus CSV-Datei. Wie kann ich den Algorithmus verbessern, um das Ziel zu erreichen?

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

Haben Sie ein Benchmarking durchgeführt, um den Engpass zu finden? Haben Sie beobachtet, wie viel CPU-Zeit das gesamte Programm im Vergleich zu Echtzeit benötigt? Das Signieren der Anforderungen und des HTTPS-Overheads kann eine erhebliche CPU-Zeit erfordern. –

Antwort

4

Warum verwenden Sie keine UUIDs? Dies ist viel wahrscheinlicher einzigartig als zufällige ID aus einer Datei, die Sie bereits erstellt

Um Ihren Code direkter zu lösen, ohne einen Schritt zurück zu nehmen, würde ich in Betracht ziehen, die Datei als dauerhaft im Hintergrund offen zu lassen als es jedes Mal öffnen, wenn Sie Ihre Funktion aufrufen.

2

Ich würde versuchen, alle möglichen zufälligen IDs aus Ihrer CSV-Datei im Speicher zu sammeln, bevor Sie Ihre While-Schleife starten. Auf diese Weise muss die Schleife die Datei nicht öffnen und eine Zufallszahl erhalten. Sie könnten dann eine Funktion schreiben, die eine Zufallszahl aus der Liste der im Speicher gehaltenen Zufallszahlen auswählt. Dies würde die Dinge sehr beschleunigen.

Verwandte Themen