【发布时间】:2026-01-22 23:25:01
【问题描述】:
我已经成功创建了一个使用长轮询从 SQS 队列中提取消息的方法,如下所示:
def dequeue_message(self, callback):
result = self.queue.receive_messages(MaxNumberOfMessages=1)
if len(result) != 0:
body = result[0].body
try:
callback(body)
result.delete()
except Exception as e:
print("message not dequeued because an error occurred"
"when running callback: " + str(e))
但我无法找到一种方法来停止轮询而不终止正在运行的 Python 进程(或者,显然,等待超时)。我能做什么?
【问题讨论】:
-
如果在长轮询期间没有消息到达队列,它应该在 20 秒或更短的时间内返回一个空结果。这还不够吗?
-
嗯,这取决于。具体是什么问题?预计用户中断 SQS 接收消息请求的频率是多少?也许对于许多人来说,等待 20 秒就足够了,但对于其他人来说,所花费的时间可能是一个问题,或者只是令人讨厌。我的问题集中在一个具体问题上,而不是这个问题在我的具体情况或大多数实际情况中是否真的很重要。
标签: python amazon-web-services boto amazon-sqs