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

标签 python azure azure-functions azure-functions-runtime azure-function-app

这可能是一个菜鸟问题。我有一个响应 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/

相关文章:

python - 使用 Python 的 Azure 函数 - Blob 触发器未触发

python - 用月份和年份填充字典列表中的缺失值

python - 正在创建 InteractiveShellEmbed 的多个不兼容的子类实例

python - 使用生成的短语检查输入的 If 语句

azure - jupyter笔记本无法在Azure ML studio中打开

azure - 当缺少必填字段时,我可以强制 Azure API 管理返回 400 而不是 404 吗?

python - 如何将 Pyramid 与 Tornado 结合使用

c# - 在 Visual Studio 2017 上添加对 Azure Function 的外部程序集引用

c# - 使用 Azure Functions 和 .NET 5 将不同的连接字符串传递到 IDesignTimeDbContextFactory(独立)

Azure Function 事件中心触发器可靠性