pythonsqs的实现是不可靠还是糟糕?

pythonsqs的实现是不可靠还是糟糕?,python,amazon-ec2,boto,amazon-sqs,Python,Amazon Ec2,Boto,Amazon Sqs,我在EC2上运行了一个盒子,里面有两个不同的python脚本,它们使用两个不同的SQS队列。我的脚本在上周一直工作得很好,突然其中一个脚本需要很长时间才能从SQS队列中提取消息。即使它设法拉取消息,它也会拉取大量重复的消息。我的两个脚本使用相同的方法: def getMessages(self, n): '''returns n messages erasing them, mutliple of 10''' msgs=[] rs=self.queue.get_messa

我在EC2上运行了一个盒子,里面有两个不同的python脚本,它们使用两个不同的SQS队列。我的脚本在上周一直工作得很好,突然其中一个脚本需要很长时间才能从SQS队列中提取消息。即使它设法拉取消息,它也会拉取大量重复的消息。我的两个脚本使用相同的方法:

def getMessages(self, n):
    '''returns n messages erasing them, mutliple of 10'''
    msgs=[]
    rs=self.queue.get_messages(10)
    if len(rs) < 1:
        return []
    count = 0
    while count < n or len(rs) < 10:
        msgs.extend(rs)
        rs=self.queue.get_messages(10)
        count += 10
    # delete pulled messages
    for msg in msgs:
        self.queue.delete_message(msg)

    return msgs
我的脚本使用getMessages()方法的方式如下:

while True:
    print 'Getting SQS messages'
    messages = sqs.getMessages(50)
    print 'Got %s messages' % len(messages)

    for msg in messages:
        do_something(msg)

    print 'Going to sleep'
    time.sleep(sleep_time)
现在,我的脚本拉取消息的时间太长,它打印
获取SQS消息
,有时会在那里停留数小时。更奇怪的是,如果我打开一个ipython shell并执行
getMessages(50)
它运行得非常快,而我的其他脚本的工作方式完全相同,但在不同的队列中,我对此绝对没有问题


这里可能有什么问题,谢谢

while循环中的getMessages函数中存在一些错误:
1.使用
count+=len(rs)

2.主要缺陷:你不需要

or len(rs) < 10
或len(rs)<10
条件,因为SQS最多可以获取10条消息,如果队列已满,并且每次获取10条消息时,将有一个无限循环

我也认为应该考虑使用<代码>收益> /COD>语句来返回消息,处理它们,并在处理之后,将它们从队列中删除。< /P> 还有一件事,检查

if len(rs)<1:
的python方法是
if not rs:

or len(rs) < 10