Интеграция очереди хранилища Azure для функций Azure в Python ведет себя ненормально - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть функция Azure в Python (v1), работающая в среде с версией 3.6.4.Я пытаюсь поместить простые строки в очередь хранения вывода в виде отдельных сообщений с помощью стандартного синтаксиса:

for SomeStrVar in ListOfStrVars:
    outputQueue = open(os.environ['outputQueueItem'],'w')
    outputQueue.write(SomeStrVar)
    outputQueue.close()

, где outputQueueItem - настроенная очередь вывода для функции.В результате получается, что вместо целого числа сообщений в целевой очереди я получаю только последнее из списка.Хотя дескриптор файла открывается и закрывается для каждого элемента в списке, кажется, что одно и то же сообщение снова и снова перезаписывается в очереди.

Для меня это не нормальное поведение, но я должен сказать, чтоЯ новичок в Python и, возможно, я здесь что-то наблюдаю.

Любые предложения о том, как это должно быть написано, чтобы работать как положено, высоко ценятся.До тех пор я переключаюсь на использование класса QueueService напрямую.

Заранее спасибо, Свет

1 Ответ

0 голосов
/ 05 февраля 2019

Выходная привязка обрабатывается в конце выполнения функции, поэтому вы видите только эту последнюю запись;это единственный объект, о котором знает узел функций.

Вместо этого в своем цикле попробуйте сгенерировать массив JSON и затем установить его в выходное значение в конце.Таким образом, вы заканчиваете тем, что пишете что-то вроде ['SomeValue1','SomeValue2','SomeValue3'] как часть привязки.Затем хост увидит массив и создаст сообщение с каждым из значений.

Я не эксперт по Python, но что-то вроде этого:

arr = { "a", "b", "c", "d" }
output = "["
for i in arr:
  output += "'%s'," % i  
output = output[:-1]
output += "]"

# write to the output binding
f = open(os.environ['output'], 'w')
f.write(output)
...