Python 多進程使用之監控

下面簡單寫下實現方式,具體代碼不會所有貼出來。
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()
相關文章
相關標籤/搜索