如何在单个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
相关产品推荐
相关产品推荐

