如何使用Boto3和Python将多个批处理消息从列表发送到SQS队列

2024-09-30 01:23:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个整数列表(integerList),我想将其传递到一个SQS队列中,其中每个进入队列的消息都是列表中的整数。在

我可以用send_message()命令一次发送一条消息,代码如下。在

import boto3

sqsResource = boto3.resource('sqs')

def write_sqs(integerList):
    queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
    for i in integerList:
        response = queue.send_message(MessageBody=str(i),
                                      MessageGroupId='TESTING')

但是,我希望加快函数的速度并成批发送消息。目前,awssqs允许使用send_messages()命令一次批处理多达10条消息,但我不确定如何为批处理发送构建Entries=属性。我使用chunks = [integerList[x:x+10] for x in range(0, len(integerList), 10)]将整型列表分解成10个更小的列表,但是下一步还不清楚。在


Tags: in命令send消息message列表for队列
2条回答

基于@liorko的答案和一些尝试和错误,这似乎是有效的,比我以前使用的一对一的方法快得多。在

import boto3

sqsResource = boto3.resource('sqs')

def write_sqs(integerList):
    queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
    maxBatchSize = 10 #current maximum allowed
    chunks = [integerList[x:x+maxBatchSize] for x in range(0, len(integerList), maxBatchSize)]
    for chunk in chunks:
        entries = []
        for x in chunk:
            entry = {'Id': str(x), 
                     'MessageBody': str(x), 
                     'MessageGroupId': 'ANYTHINGYOUWANT'}
            entries.append(entry)
        response = queue.send_messages(Entries=entries)

根据documentationEntries是一个消息列表。
对于Entries中的每个条目,参数类型在链接中有详细说明。在

import boto3

sqsResource = boto3.resource('sqs')

def write_sqs(integerList):
    queue = sqsResource.get_queue_by_name(QueueName=NAMEOFQUEUEHERE)
    entries = []

    for i in integerList:
        entry =  {
            'Id': 'id%s' % str(integerList[i]),
            'MessageBody': str(integerList[i])
            }
        entries.append(entry)

    response = queue.send_messages(entries)

相关问题 更多 >

    热门问题