標籤:windows request process python 伺服器
上一篇文章中寫過使用powershell多線程監控網站狀態,但powershell只能運行在Windows環境,於是將powershell代碼改成了python代碼,下面簡單寫下實現方式,具體代碼不會全部貼出來。
需要使用的py庫有下面幾個
import urllib2import socketfrom multiprocessing import Poolfrom threading import Thread
urllib2用於請求網頁
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參數‘
嘗試執行代碼試試效果。
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()
Python 多進程使用之監控