Если вы постоянно потребляете сообщения медленнее, чем они создаются, обычно сообщения в SQS (или какой-либо другой системе сообщений, которую вы можете использовать) истекают и теряются. Медленный потребитель может вызвать проблемы с памятью, если у вас есть производитель и потребитель в одних и тех же потоках в памяти, и в этом случае вам может не хватить памяти и cra sh, но это менее характерно для архитектуры на основе сообщений. Чаще всего сообщения будут храниться на диске, но обычно срок их хранения все еще ограничен.
[Изменить]
Если вы используете в памяти неограниченную очередь, вы может столкнуться с проблемами, возьмите следующий пример:
from threading import Thread
import time
from multiprocessing import Queue
class SlowConsumer(Thread):
def __init__(self, queue: Queue):
self.queue = queue
Thread.__init__(self)
def run(self):
while True:
v = self.queue.get()
print(f"Processing #{v}")
time.sleep(1)
q = Queue()
c = SlowConsumer(q)
c.start()
i=0
while True:
q.put(i)
i+=1
time.sleep(.1)
Потребитель всегда будет отставать от производителя. В конце концов процесс исчерпает доступную память. Это патологический случай, которого следует избегать - обычно используя ограниченную очередь. Примечание: фактически та же самая проблема может существовать с внешними очередями, которые поддерживают неограниченное хранение, такими как Kafka, но у нас не хватит памяти, мы исчерпаем диск. Для дисковых очередей также лучше установить период хранения, если разумный существует.