我需要向队列存储提交一条消息,但没有立即触发绑定到该队列的函数。在这个基本示例中,我想向队列提交一条消息,以便在1分钟后触发一个函数:
def main(msg: func.QueueMessage, outputQueueItem: func.Out[func.QueueMessage]) -> None:
data = msg.get_json()
# Do some fancy stuff
message = func.QueueMessage(body=json.dumps({"spam": 1, "eggs": "ham"}))
# This causes an AttributeError since you cant set time_next_visible
message.time_next_visible = datetime.utcnow() + timedelta(minutes=1)
outputQueueItem.set(message)
# More fancy stuff down here
我可以在提交消息之前投入time.sleep(60)
,但这似乎是一种不好的做法,而且它会延迟提交消息的行下方的任何其他代码,并增加运行该函数的费用。如果需要大的延迟(例如一个小时),这尤其糟糕。
有什么好方法可以延迟消息立即触发下一个功能?
答案 0 :(得分:1)
Python不能使用持久函数,因此您有两种实现想法的方法。
首先是您所说的,使用睡眠使其等待。
第二个来自 Python Azure SDK
,使用put_message
方法将邮件保留在队列中(设置Visibility
),看看如何使用put_message。