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

为什么Scrapy的CrawlerProcess传入get_project_settings会导致代码重复执行?

问题原因

你遇到的重复执行现象本质不是执行指针回退,是你的主执行代码直接写在了模块顶层,没有加if __name__ == "__main__"保护:
当你传入get_project_settings()初始化CrawlerProcess时,Scrapy底层加载项目配置、初始化Twisted反应器的流程会触发主模块的二次导入,Python在spawn进程启动模式(Windows、macOS系统默认模式)下会重新执行主脚本的所有顶层代码,就出现了print("check")执行两次的现象。
不带参数初始化CrawlerProcess时使用默认空配置,不会触发模块重导入流程,因此不会出现重复执行的问题。你的未调用爬虫、settings配置均和该问题无关。

解决方案

将所有执行逻辑移到if __name__ == "__main__"代码块内即可,修改后代码参考:

# 模块导入、工具函数等可以放在顶层
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
# 其他你的导入逻辑

if __name__ == "__main__":
    print("check")
    process = CrawlerProcess(get_project_settings())
    process.crawl('BoxOfficeSpider', df=movie_data)    
    process.start()

内容的提问来源于stack exchange,提问作者Nikhil Jindia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:36:03