Python 多进程使用之监控

发布时间:2019-08-27 08:02:51编辑:auto阅读(1526)

    下面简单写下实现方式,具体代码不会全部贴出来。


    需要使用的py库有下面几个

    import urllib2
    import socket
    from multiprocessing import Pool

    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()


关键字