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

写爬虫项目时,为防止某一个爬虫挂了影响到其他爬虫的进行,所以对爬虫单独开启一个进程,然后设置每个爬虫时间范围,如果超出了这个时间,则将该爬虫的进程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参数的值就可以,如果没有在规定时间内完成任务,那么就会出错。

subprocess.Popen使用及wait()的简单描述_第1张图片

你可能感兴趣的:(python多进程,python)