最近golang寫得多,但是采集數據還是習慣性地切換到了python。
業務需求1.采集
剛開始調試、測試使用的單線程,經過2個小時,終于跑通了。覺得數據量不大,跑跑一兩個小時也采集完了,實際并沒有。超時中斷了很多次,又不得不做補償措施。前後又折騰了倆小時才跑了一小半的數據,沒跑下來的都是異常的。腦子木了。
因為要處理水印,忍住沒切換到go。
接下來一個小時不到,采用python multiprocessing
爬蟲技術:
import urllib3 as urllib
from bs4 import BeautifulSoup
from urllib.parse import urlencode, urlparse
import multiprocessing
本機:Mac m1, conda env python3.10
采集效率比對:
單線程 444s - 丢失數據,做補償措施也隻跑了不到2/3
多進程 172s - 100%
def scrawl():
t1 = time.time()
pools = multiprocessing.Pool(8)
missingWords = pools.imap(parsingWord, wordsLeft)
pools.close()
pools.join()
t2 = time.time()
print("耗時:", t2 - t1)
技術細節忽略,自我總結:容易被問題套住,跳不出思維怪圈。
2.圖片清洗
接上一篇文章:python pillow-GIF 去除水印并壓縮
因為gif處理流程相對複雜一點,準備在單線程基礎上增加協程并行處理能力。
記錄:
單線程:處理一張gif 耗時26s,優化業務處理流程後16s多。
協程:80張gif圖片-20多分鐘
19:29因為是單線程發生了IO阻塞,如果時間上不着急,按隊列去理解,是可以接受的
8CPU也沒快多少,内存消耗減少了,cpu呼呼轉跟風扇似的
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!