You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个Azure Function中运行多个Python脚本

单个Azure Timer Function调用多爬虫脚本实现方案

你的项目结构完全可行,只需对__init__.py和爬虫脚本做简单调整,就能在单个Timer触发器里批量执行所有爬虫:

1. 给每个爬虫脚本添加入口函数

在python_script_one.py和python_script_two.py里,各自封装一个可调用的入口函数,把爬虫逻辑包裹进去:

# python_script_one.py
import logging

def run_spider_one():
    logging.info("开始执行网站1爬虫")
    # 这里写你的爬虫逻辑(请求页面、解析数据、存储结果等)
    logging.info("网站1爬虫执行完成")
# python_script_two.py
import logging

def run_spider_two():
    logging.info("开始执行网站2爬虫")
    # 这里写你的爬虫逻辑
    logging.info("网站2爬虫执行完成")

2. 修改__init__.py调用所有爬虫

在Timer触发器的主函数里,导入这些爬虫的入口函数,依次调用并加入错误处理,避免单个爬虫失败中断整个流程:

import datetime
import logging
import azure.functions as func
# 导入你的爬虫模块
from . import python_script_one
from . import python_script_two

def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('定时器已逾期执行!')

    logging.info('Python定时器触发器函数执行于: %s', utc_timestamp)

    # 批量执行所有爬虫
    spider_tasks = [
        ("网站1爬虫", python_script_one.run_spider_one),
        ("网站2爬虫", python_script_two.run_spider_two)
    ]

    for task_name, task_func in spider_tasks:
        try:
            logging.info(f"启动任务: {task_name}")
            task_func()
            logging.info(f"任务完成: {task_name}")
        except Exception as e:
            logging.error(f"任务失败: {task_name},错误信息: {str(e)}", exc_info=True)

3. 依赖与部署注意事项

  • 把所有爬虫用到的第三方库(比如requests、beautifulsoup4)都列在项目根目录的requirements.txt中,Azure会在部署时自动安装这些依赖。
  • 本地测试时,直接运行func start就能触发Timer函数,验证所有爬虫的执行情况。
  • 部署时,Azure会自动包含函数目录下的所有.py文件,无需额外配置文件路径。

可选优化

  • 如果爬虫执行时间较长,且爬虫逻辑线程安全,可以用concurrent.futures实现并行执行,提升整体效率。
  • 可以把爬虫任务列表放到单独的配置文件(比如config.json)里,后续新增爬虫只需修改配置,不用改动__init__.py。

内容的提问来源于stack exchange,提问作者Mitchell.Laferla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:57:17