为什么我的 python 定时器触发功能没有在正确的时间 运行?

Why is my python timer trigger function not running at the correct time?

这可能是一个菜鸟问题。我有一个响应 HTTP 请求的 Azure 函数,它工作正常,我可以从浏览器或 Python 3.8 脚本调用它。

我想创建另一个具有 Timer Trigger 的函数,并将按计划调用 HTTP trigger function

HTTP Trigger function returns 一个带有执行结果的简单字符串。

现在我的 Timer trigger function 代码正在使用 Python Requests 并且它每次都在本地工作,但在部署到 Azure 时只能工作 1/10 次。其他时候,当达到 30 分钟的超时时,它会出现 returns 错误。整个事情应该 运行 最多只持续 1-2 分钟,所以我不明白它卡在哪里。

成功后它起作用(我可以在 HTTP trigger script 的后端看到),但在 azure 日志中,记录器保存 404 error 页 html 而不是 HTTP trigger function 的字符串] 应该 return.

定时器触发函数的代码如下:

import datetime
import logging

import azure.functions as func

import requests

def main(mytimer: func.TimerRequest) -> None:
    URL = "https://rob-functions.azurewebsites.net/api/ss_kite_scrape_http"
    r = requests.get(url = URL) 
    data = r.text
    logging.info(f'TIMER TRIGGER HAS RUN. RESULT:{data}')

如何解决或解决这个问题?日志记录问题不是那么重要,但超时问题必须以某种方式解决,我不知道从哪里开始,因为它在本地完美运行。

根据一些测试,我遇到了和你类似的问题。我使用默认代码创建了一个 HttpTrigger(我在其中添加了一行 time.sleep(20))。然后我用 requests 模块创建一个 TimerTrigger(cron 表达式是 0 */1 * * * *)来调用 HttpTrigger 函数。这两个功能在一个功能应用程序中,似乎问题是由两个功能相互作用引起的,但我不知道为什么。所有这两个函数代码看起来都很好。

作为解决方法,我在不同的函数应用程序中创建了两个函数(HttpTrigger 和 TimerTrigger),并将它们部署到 Azure 中的两个函数应用程序。然后就可以正常工作了,他们不会互相影响了。

希望对你有帮助~

下面的问题现在apparently been fixed虽然我还没有确认


与此相关的某些 cron 表达式似乎存在某种问题。例如看我的GitHub issue here。所以我有一个 cron 表达式 "0-59 * * * *",这导致我的函数应用程序停止轮询而没有错误:

我根据此 blog post 中的信息将 cron 更改为 "0 */2 * * * *",现在我的功能按预期工作。

GitHub issue 中,我要求对此行为进行解释。