下面簡單寫下實現方式,具體代碼不會所有貼出來。
python
須要使用的py庫有下面幾個mysql
import urllib2 import socket from multiprocessing import Pool
urllib2用於請求網頁sql
socket用於限制網絡請求超時數據庫
pool用於設置進程池,這個在數據量很大的狀況下采用pool遠比使用process要好不少,後者會消耗掉大量服務器資源,甚至致使宕機的風險,在數據量不大的狀況下能夠考慮後者,好比10條之內的數據。服務器
'''請求指定Url地址''' def request_url(url): '''設置請求超時時間''' socket.setdefaulttimeout(5) try: '''構造 http請求''' request=urllib2.Request(url) response=urllib2.urlopen(request) except Exception,e: print '%s|%s|%s'%(url,e,request.get_method()) else: print '%s|%s|%s'%(url,response.code,request.get_method())
獲取url的方式能夠本身定義,有時候咱們會將數據保留在文件中,但更多的是寫在數據庫,下面代碼提供了很好的靈活性,代碼中的內容本身能夠再完善
網絡
'''從文件或數據庫中獲取須要監控的網頁地址''' def get_url_list(value): if value == '': print '該函數須要指定一個參數!' return if value == 'file': file_path='C:\urllist.txt' #文本中的數據一行一條 try: f=open(file_path, 'r') except Exception,e: print e else: return f.readlines() elif value == 'mysql': pass else: print '傳入值錯誤!' print '該函數只接收 file、mysql參數'
嘗試執行代碼試試效果。
app
if __name__ == '__main__': url_list=get_url_list('file') if url_list: '''定義進程池中最大的進程數''' pl=Pool(processes=10) for url in url_list: '''去掉換行符''' url=url.strip('\n') result=pl.apply_async(request_url,(url,)) pl.close() pl.join()