首页 > 解决方案 > Python 中 Azure Functions 的 Azure 存储队列集成行为异常

问题描述

我在 3.6.4 版本的环境中运行 Python (v1) 中的 Azure 函数。我试图通过标准语法将简单的字符串作为单独的消息放入输出存储队列:

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

其中 outputQueueItem 是为函数配置的输出队列。发生的情况是,我只得到列表中的最后一条消息,而不是在目标队列中收到 X 条消息。即使为列表中的每个元素打开和关闭文件句柄,似乎相同的消息在队列中被一遍又一遍地覆盖。

对我来说,这不是正常行为,但我必须说我是 Python 新手,可能是我在这里监督一些事情。

任何有关如何将其编写为按预期工作的建议都将受到高度赞赏。在那之前,我将切换到直接使用 QueueService 类。

在此先感谢,斯维特

标签: python-3.xazure-functionsazure-storage-queues

解决方案


输出绑定在函数执行结束时处理,这就是为什么您只看到最后一个条目的原因;这是主持人唯一知道的功能。

相反,在您的循环中,尝试生成一个 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)

推荐阅读