这可能是一个菜鸟问题。我有一个响应 HTTP 请求的 Azure 函数,它工作正常,我可以从浏览器或 Python 3.8 脚本调用它。
我想创建另一个具有定时器触发器
的函数,并按计划调用HTTP触发器函数
。
HTTP 触发函数
返回一个带有执行结果的简单字符串。
现在,我的定时器触发函数
代码使用Python Requests
,它每次都在本地工作,但部署到Azure时只能工作1/10次。其他时候,当超时达到 30 分钟时,它会返回错误。整个过程最多只能运行 1-2 分钟,所以我不明白它在哪里卡住了。
成功后,它可以工作(我可以在HTTP触发脚本
的后端看到),但在 azure 日志中,记录器保存404错误
页面html而不是HTTP 触发函数
应该返回。
下面是定时器触发功能的代码:
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 中的两个函数应用。然后就可以正常工作了,他们不会互相交互。
希望对你有帮助~
关于python - 为什么我的 python 定时器触发函数没有在正确的时间运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61035038/