問題說明:larbin程序爬取某個網站,在爬取完所有連接後,如果有定義爬取完後exit(),則程序會終止進程;如果沒有定義,larbin程序只會會輸出一些統計信息,其他貌似都沒工作了,對於新增的連接也不會爬取。
鑑於以上問題,larbin程序需要重啓。一下介紹兩個方案,代碼就不貼了。
方案一:
主要思想:
判斷隊列( URLsDisk->getLength(),URLsDiskWait->getLength() )是否爲空,如果隊列爲空則說明已經沒有需要爬取的url連接了,larbin程序需要重新啓動。
方案二:
主要思想:
定義urls(到目前已經獲取的url數量),pages(到目前已經獲取的pages),old_url(8秒前已經獲取的url數量),old_pages(8秒前已經獲取的page數量)
如果目前獲取的url、pages數量和8秒前獲取的url、pages數量相等,則判斷larbin程序已經完成了爬取,需要重啓。
重啓步驟,先創建子進程,子進程啓動新的larbin程序後,父進程殺死原來的larbin程序。