Если в очереди служебной шины есть какие-либо сообщения, я хочу, чтобы моя работа с Python расширялась, чтобы сообщения обрабатывались быстрее.
У меня есть веб-работа с питоном, которая отправляет информацию из очереди служебной шины.Очередь заполняется каждый день в полночь и может содержать от 0 до около 400 тыс. Сообщений.
Узким местом в текущей обработке является необходимость загрузки некоторых данных, а это означает, что расширение веб-задания выигралоне так сильно, как распараллеливание.
Я увеличил его до 10 экземпляров от 1, но это не влияет на скорость, с которой сообщения принимаются из очереди, что говорит о том, что это работает не так, как я ожидаю.Когда он был в 1 экземпляре, он обрабатывал ~ 1,53 тыс. В час.Через час после масштабирования до 10 экземпляров было обработано ~ 1,5 тыс. Сообщений (так что, по сути, без разницы).
Код, который я использую для взаимодействия с очередью, следующий: (если есть лучший способ сделать этоэто в Python, пожалуйста, дайте мне знать!):
from azure.servicebus import ServiceBusService, Message, Queue
bus_service = ServiceBusService(
service_namespace= <namespace>,
shared_access_key_name='RootManageSharedAccessKey',
shared_access_key_value=<key>)
while(1):
msg = bus_service.receive_queue_message(<queue>, peek_lock=False, timeout=1)
if msg.body is None:
print("No messages in queue")
time.sleep(5)
else:
number = int(msg.body.decode('utf-8'))
print(number)
Я знаю, что в C # есть атрибут QueueTrigger для веб-заданий, но я не знаю ничего подобного для Python.
Я бы хотеложидайте, что чем больше экземпляров будет запущено в службе приложений, тем быстрее будут обрабатываться сообщения, так почему же это не то, что я вижу?