mrh 0091c9e1bb 完成竞品爬取和竞品表格写入。(因为mongo和AI调整的原因导致结构被修改,因此要重新解析写入) 11 months ago
..
browser 9820ba46f2 修改 product 爬取结果字段,并完成迁移。新增主关键词分析字段。备份数据库 I:\eng\backup\mongo\20250326_02_05_03 11 months ago
excel_tools 0091c9e1bb 完成竞品爬取和竞品表格写入。(因为mongo和AI调整的原因导致结构被修改,因此要重新解析写入) 11 months ago
manager 0091c9e1bb 完成竞品爬取和竞品表格写入。(因为mongo和AI调整的原因导致结构被修改,因此要重新解析写入) 11 months ago
models 0091c9e1bb 完成竞品爬取和竞品表格写入。(因为mongo和AI调整的原因导致结构被修改,因此要重新解析写入) 11 months ago
tasks a240577ead 完成亚马逊搜索主关键词并存入数据库。备份MongoDB 11 months ago
tools 04c29fb750 新增数据库备份。修复竞品爬取图片下载到S3路径错误的问题。 11 months ago
readme.md e1ac77b527 完善解析 worker 1 year ago

readme.md

启动

ssh mrh@sv-v2
cd ~/program/redis
dc up -d
$env:CONFIG_PATH="G:\code\amazone\copywriting_production\config\dp_conf\9321_worker.yaml";celery -A src.tasks.crawl_asin_save_task worker --loglevel=info --hostname=9321@%h

celery -A config.celery flower 

python -m src.manager.cli_tasks --help
python -m src.manager.cli_tasks purge-queue --force

celery worker 每个任务的分离

将各个任务拆分到不同文件是遵循软件工程中模块化设计原则的典型实践,这样做主要有以下核心价值:


一、功能隔离原则

  1. 职责清晰划分

    • save_tasks.py 专注数据采集与存储
    • extract_tasks.py 专注数据解析与加工
    • 每个文件对应一个独立业务领域,避免"上帝文件"问题
  2. 变更影响域控制

    • 修改存储逻辑时只需关注save_tasks.py
    • 调整解析规则时只需修改extract_tasks.py
    • 降低因修改引发连锁BUG的风险

二、依赖管理优化

  1. 按需加载依赖

    # save_tasks.py 可能需要的依赖
    from storage_lib import S3Client  
    
    # extract_tasks.py 需要的依赖
    from nlp_lib import TextAnalyzer
    
    • 不同任务可能依赖不同的第三方库
    • 分离后避免不必要的内存占用
  2. 启动性能提升

    • Worker按任务类型加载对应模块
    • 避免加载全部依赖拖慢启动速度

三、部署灵活性

  1. 独立伸缩能力

    # 单独部署存储类Worker
    celery -A tasks.save_tasks worker --loglevel=info -Q save_queue
    
    # 单独部署解析类Worker 
    celery -A tasks.extract_tasks worker --loglevel=info -Q extract_queue
    
    • 可根据任务类型配置差异化的:
      • 并发数(--concurrency
      • 内存限制(--max-memory-per-child
      • 重试策略
  2. 资源隔离优势

    • 存储任务可能需要大带宽
    • 解析任务需要高CPU
    • 分开部署可匹配最佳硬件配置

四、版本控制友好性

  1. 降低合并冲突

    • 不同开发者同时修改存储/解析逻辑时
    • 文件分离大幅减少git冲突概率
  2. 变更追溯明确

    • git历史记录更清晰反映业务模块演进
    • 比在单一文件中找变更片段更高效

五、安全边界建立

  1. 权限隔离

    # save_tasks.py 需要写存储权限
    AWS_ACCESS_KEY = os.getenv('STORAGE_KEY')  
    
    # extract_tasks.py 只需要读权限
    AWS_READ_ONLY_KEY = os.getenv('READ_KEY')
    
    • 可通过不同IAM角色运行任务
    • 遵循最小权限原则

六、可测试性增强

  1. 精准测试定位

    # 测试保存功能
    pytest tests/test_save_tasks.py
    
    # 测试解析功能  
    pytest tests/test_extract_tasks.py
    
    • 测试套件与任务文件一一对应
    • 测试覆盖率统计更精确

七、现实场景验证

某电商爬虫系统的演进过程:

阶段 代码结构 问题表现
V1.0 所有任务在tasks.py 1. 添加新任务频繁引发回归BUG
2. 内存占用持续走高
V2.0 按领域拆分为3个文件 1. 任务失败率下降40%
2. 扩容成本降低35%

何时可以合并文件?

以下场景可考虑合并:

  1. 原型开发阶段:快速验证概念
  2. 微型项目:总代码量<500行
  3. 生命周期末期:系统即将下线

通过这种模块化设计,既能保持小项目的灵活性,又能为系统演进预留充足空间,是平衡当下效率与长期维护成本的理性选择。