subprocess.Popen使用及wait()的简单描述

本文介绍了一种通过子进程单独运行爬虫并设置时间限制的方法,以防止单个爬虫故障影响整体任务。使用Python的subprocess模块,为每个爬虫设定执行周期,超时则自动终止,确保系统稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写爬虫项目时,为防止某一个爬虫挂了影响到其他爬虫的进行,所以对爬虫单独开启一个进程,然后设置每个爬虫时间范围,如果超出了这个时间,则将该爬虫的进程kill掉,这样可以不影响其他爬虫任务的进行。使用subprocess模块


```python
# scrapy crawl *** -a taskid=***
    spider_name = gbl.gConfig.get('spiders_info').get('gxmobile').get(spider_type)
    cmd = [env_path, 'crawl', spider_name, '-a', f'taskid={task_id}']
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                         cwd=f'{project_path}')

    #  必须在执行周期时间之内执行完成
    try:
        p.wait(timeout=gbl.gConfig.get('spiders_info').get('gxmobile').get('timeout').get(spider_type))
        gbl.gLogger.info(f'run spider done for {task_id}!')
        return True
    except Exception as e:
        gbl.gLogger.error(f'async_run_spider failed {task_id}, desc: {e}->{traceback.format_exc()}')
        p.kill()
        return False

这里展现的是使用方法,具体的参数这里我就介绍一个这里用到的,就是cwd参数,这个参数的意思是所需进行任务的路径,比如我这里写的scrapy爬虫,那么我需要将路径切换为这个scrapy项目下才可以开启爬虫。
然后就是wait()使用,设置timeout参数的值就可以,如果没有在规定时间内完成任务,那么就会出错。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值