多執行緒網路爬蟲

2021-06-05 19:31:01 字數 480 閱讀 9489

最近用c在linux環境下搞了乙個多執行緒網路爬蟲,真是歷經坎坷啊。現在把自己的教訓總結一下:

盡量不要使用靜態陣列,如 char path[200] 之類的。不要以為**的path「應該」不長。有些網頁在302重定向時,會提供乙個特別長的path。這可能是由程式設計人員的疏忽導致。不管怎麼樣,如果path溢位,那定義在path之後的變數就全部被損壞了,從而導致不可預知的錯誤。

檢查calloc等函式返回的指標。不要以為記憶體總是夠用。要養成良好的習慣。在爬取數百萬的網頁時,記憶體很可能耗盡。

養成良好的程式設計習慣。比如程式中有很多檔案操作符、記憶體塊需要釋放。同時還有很多異常需要處理。在處理異常時會發生很多跳轉,而跳轉之前一定要把該釋放的資源釋放掉。我開始就是沒注意這些東西,結果**看起來一團糟~~ 對於這些資源,最好統一到乙個函式中進行處理。

學習gdb的除錯功能,通過gdb給出的提示,在相應**處加入printf,結合__line__,__file__, __func__等巨集進行除錯。

網路爬蟲 多執行緒爬蟲

多執行緒爬蟲 import threading class one threading.thread def init self threading.thread.init self def run self for i in range 0,10 print 我是執行緒1 class two th...

爬蟲多執行緒

多執行緒在之前的scrapy裡面已經接觸過了,就是裡面的yiled,開啟乙個新的執行緒。但是這是這是基於這個高階框架的,用的時候只知道這是開啟了乙個新的執行緒,並不是很清楚到底是怎麼執行的。而在python裡面有包 import threading引入這個包之後就可以寫自己的多執行緒了 寫多執行緒的...

多執行緒爬蟲

python標準庫是執行緒之間常見的資料交換形式 queue的使用可以確保python的執行緒安全 q queue.queue maxsize 建立佇列,並可以指定大小 q.empty 判斷佇列是否為空 q.full 判斷佇列是否滿 q.put data 向佇列中放入資料 q.get 從佇列中拿資料...