Python爬虫管理工具ScrapydWeb如何取消pending jobs

安装更新

pip install -U git+https://github.com/my8100/scrapydweb.git

GitHub

https://github.com/my8100/scrapydweb


Python爬虫管理工具ScrapydWeb如何取消pending jobs
1 回复

要取消ScrapydWeb中的pending jobs,可以通过Scrapyd的HTTP API直接操作。以下是具体方法:

import requests

# Scrapyd服务器地址
SCRAPYD_URL = 'http://localhost:6800'

def cancel_pending_jobs(project_name):
    """
    取消指定项目的所有pending jobs
    """
    # 获取所有jobs列表
    jobs_url = f'{SCRAPYD_URL}/listjobs.json?project={project_name}'
    response = requests.get(jobs_url)
    jobs_data = response.json()
    
    # 遍历pending jobs并取消
    pending_jobs = jobs_data.get('pending', [])
    cancelled_count = 0
    
    for job in pending_jobs:
        job_id = job['id']
        cancel_url = f'{SCRAPYD_URL}/cancel.json'
        payload = {
            'project': project_name,
            'job': job_id
        }
        
        cancel_response = requests.post(cancel_url, data=payload)
        if cancel_response.json().get('status') == 'ok':
            cancelled_count += 1
            print(f'已取消job: {job_id}')
    
    print(f'共取消了 {cancelled_count} 个pending jobs')

# 使用示例
if __name__ == '__main__':
    # 替换为你的项目名称
    cancel_pending_jobs('your_project_name')

核心原理:

  1. 先调用/listjobs.json接口获取所有jobs状态
  2. 从返回的JSON中提取pending列表
  3. 对每个pending job调用/cancel.json接口取消

补充说明:

  • 确保Scrapyd服务正在运行
  • 项目名称需要与实际一致
  • 可以通过ScrapydWeb界面查看项目名称

一句话建议: 直接调用Scrapyd的API接口批量取消pending jobs最有效。

回到顶部