如何实现超过1000 msg /秒的速度到SQS?

时间:2017-07-04 13:23:03

标签: python algorithm performance amazon-web-services amazon-sqs

我有以下代码向SQS发送批处理消息。 我的目标是在1000 msg/sec循环中发送while true

我有瓶颈 - 从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)

2 个答案:

答案 0 :(得分:4)

为什么不使用UUID?这比您预先创建的文件中的随机ID更有可能是唯一的

为了更直接地解决你的代码而不退后一步,我会考虑让文件在后台保持打开状态,而不是每次调用你的函数时都打开它。

答案 1 :(得分:2)

在开始while循环之前,我会尝试从内存中的CSV文件中收集所有可能的随机ID。这样循环不必打开文件并获得随机数。然后,您可以编写一个函数,从内存中保存的随机数列表中选择一个随机数。这会加快速度。