2

这是我的shell脚本

#!/bin/bash

crawlers(){
    nohup scrapy crawl a &
    nohup scrapy crawl b &
    wait $!
    nohup scrapy crawl f &
    nohup scrapy crawl g &
    wait $!
    nohup scrapy crawl h &
    nohup scrapy crawl i &
    wait $!
    nohup scrapy crawl i &
    nohup scrapy crawl j &
    nohup scrapy crawl k &
    wait $!
    nohup scrapy crawl l &
    nohup scrapy crawl m &
}

PATH=$PATH:/usr/local/bin
export PATH

python add_columns.py &
wait $!
crawlers &
wait $!
python final_script.py &

我要运行的第一个add_columns.py 脚本

然后是爬虫脚本(爬虫中的所有脚本都是异步的

终于想运行final_script.py

但使用上面的shell脚本

final_script.py 在结束前执行

nohup scrapy crawl l &
nohup scrapy crawl m &

虽然我等着爬虫

crawlers &
wait $!

最后,只有在 crawlers() 方法中的所有作业完成后,我才能调用 final_script.py。

谢谢

4

1 回答 1

0

首先,为什么要费心为你立即做的事情做背景wait

其次,在crawlers函数中,您只wait进行了一半的调用;另一半可能仍在运行。

使用wait不带参数等待所有当前活动的孩子退出。这将是一个更好的版本:

#!/bin/bash

crawlers(){
    nohup scrapy crawl a &
    nohup scrapy crawl b &
    nohup scrapy crawl f &
    nohup scrapy crawl g &
    nohup scrapy crawl h &
    nohup scrapy crawl i &
    nohup scrapy crawl i &
    nohup scrapy crawl j &
    nohup scrapy crawl k &
    nohup scrapy crawl l &
    nohup scrapy crawl m &

    wait
}

PATH=$PATH:/usr/local/bin
export PATH

python add_columns.py

crawlers

python final_script.py
于 2012-11-03T18:51:44.377 回答