Python if __name__=="__main__"调用TwitterHarvester.main逻辑问题
代码执行逻辑解析
入口判断逻辑
- 代码块开头的
if __name__ == "__main__":是Python标准的脚本运行入口判断:仅当当前Python文件被直接执行(而非被其他文件作为模块导入)时,才会运行缩进块内的逻辑。
main方法的实际调用来源
- 由于
TwitterHarvester类自身未定义main方法,根据Python类的属性继承查找规则,这里实际调用的是其父类BaseHarvester中实现的main方法。 - 调用时传入的三个参数作用分别是:
- 第一个参数
TwitterHarvester:显式将当前推特采集器类传入父类通用主逻辑,告知主逻辑需要实例化、调度的是推特采集器实现,而非其他继承BaseHarvester的平台采集器 - 第二个参数
QUEUE:传入消息队列实例/配置,供主逻辑完成队列连接、任务拉取、状态上报等操作 - 第三个参数
[SEARCH_ROUTING_KEY, TIMELINE_ROUTING_KEY]:传入任务监听的路由键列表,对应两类推特采集任务:关键词搜索、用户时间线采集,主逻辑只会消费匹配这两个路由键的采集任务
- 第一个参数
完整执行流程
结合给出的TwitterHarvester类实现,这段代码启动后的实际运行流程为:
- 进入
BaseHarvester的通用main逻辑,完成日志初始化、工作路径校验、消息队列连接等基础启动操作 - 实例化
TwitterHarvester类,执行定义的__init__逻辑:调用BaseHarvester构造方法完成基础属性初始化、设置连接/HTTP错误重试阈值、预留twarc客户端属性 - 绑定传入的两个路由键,持续从消息队列拉取对应类型的采集任务
- 每拉取到一条有效任务,就调用
TwitterHarvester重写的harvest_seeds方法:- 先初始化twarc推特采集客户端
- 读取任务消息中的
type字段判断采集类型 - 根据采集类型分发到对应的具体采集方法(
search/filter/sample/user_timeline)执行采集 - 如果任务
type不在已实现的四类范围内,直接抛出KeyError
- 单任务采集完成后回到队列监听状态,等待下一个采集任务
内容的提问来源于stack exchange,提问作者Adhithya Kiran
相关产品推荐
相关产品推荐

