확장: 다 중 스 레 드 전개, 난이도 중간 -- wh 05

3423 단어
확장: 다 중 스 레 드 전개 - 완료
실험 설명
1. 환경 로그 인
비밀번호 없 이 자동 로그 인, 시스템 사용자 이름 shiyanlou
2. 환경 소개
이 실험 환경 은 데스크 톱 이 있 는 Ubuntu Linux 환경 을 사용 합 니 다. 실험 에 서 는 데스크 톱 프로그램 을 사용 합 니 다.
1. Xfce 터미널: Linux 명령 행 터미널, 열 면 Shell 환경 에 들 어 갑 니 다. Linux 명령 을 사용 할 수 있 습 니 다.
  • Firefox: 브 라 우 저 는 프론트 인터페이스 가 필요 한 과정 에서 사용 할 수 있 습 니 다. 환경 에 쓰 인 HTML/JS 페이지 만 열 면 됩 니 다
  • GVim: 아주 좋 은 편집기 입 니 다. 가장 간단 한 용법 은 과정 Vim 편집기
  • 를 참고 할 수 있 습 니 다.
    3. 환경 사용
    GVim 편집기 로 실험 에 필요 한 코드 와 파일 을 입력 하고 터미널 실행 에 필요 한 명령 을 사용 합 니 다.
    실험 보고 서 는 개인 홈 페이지 에서 볼 수 있 습 니 다. 그 중에서 매번 실험의 캡 처 와 필기, 그리고 매번 실험의 효과 적 인 학습 시간 (실험 데스크 톱 에서 조작 하 는 시간 을 말 합 니 다. 조작 하지 않 으 면 시스템 은 멍 때 리 는 시간 으로 기록 합 니 다) 을 포함 합 니 다.이것들 은 모두 당신 이 배 운 진실성 증명 입 니 다.
    실험 건물 가상 머 신 은 python 2. X 와 python 3. X 버 전 을 가지 고 있 습 니 다. 이 실험 을 설치 할 필요 가 없습니다. python 2.7 버 전, 즉 기본 버 전 을 사용 하 는 것 을 권장 합 니 다.
    과정 소개
    이 절 과정 은 주로 python 의 threading 모듈 을 설명 합 니 다.
    이번 파충류 의 속 도 는 그림 다운로드 속도 와 링크 열기 속도 에 달 려 있다. 앞의 3 절 코드 를 연결 해서 다운로드 하면 속도 가 빠 르 지 않 고 120 k 를 넘 지 않 는 다 는 것 을 알 게 될 것 이다.하지만 파충류 한 명 이 여러 명 씩 나 누 어 일 하면 효율 이 크게 높아진다.
    실험 코드
    import re
    import urllib2
    import meizi_series_nextpage
    import threading
    
    def loadurl(url):
        try:
            conn = urllib2.urlopen(url,data=None,timeout=5)
            html = conn.read()
            return html
        except urllib2.URLError:
            return ''
        except Exception:
            print("unkown exception in conn.read()")
            return ''
    
    def meizi(url,path):
        reTagContent = '.*?(.*?)'
        reTagUrl = ''
        print 'start open meiziwang'
        html = ''
        while True:
            html = loadurl(url)
            if html == '':
                print 'load', url,'error'
                continue
            else:
                break
        tagContent = re.findall(reTagContent, html, re.S)
        taglists = re.findall(reTagUrl, tagContent[0], re.S)
        taglists = sorted(list(set(taglists)))
        print 'open meiziwang over'
        #print len(taglists)
        threads = []
        for url in taglists:
            t =threading.Thread(target=meizi_series_nextpage.nextpage,args=(url,path))
            threads.append(t)
        for t in threads:
            t.start()
        for t in threads:
            t.join()
    

    코드 는 사실 기초 수업 의 마지막 코드 입 니 다.
    #导入threading模块
    import threading
    
        #创建线程列表,这里的缩进,直接和上面对应,看仔细
        threads = []
        #循环,tag的url对应一个线程,传入参数,引用Thread函数,再加入到线程列表中,像不像高阶函数?
        for url in taglists:
            t =threading.Thread(target=meizi_series_nextpage.nextpage,args=(url,path))
            threads.append(t)
        #启动线程列表中的线程,start()
        for t in threads:
            t.start()
        #等待线程列表中的线程自动结束---如果没有这段代码,在这个函数(def meizi(url,path))结束,其余的线程会乖乖的结束
        for t in threads:
            t.join()
    

    이제 너 는 앞의 몇 마디 의 코드 를 다 중 스 레 드 로 바 꿀 수 있다.
    지금 네트워크 속 도 를 살 펴 보 세 요. 화력 이 모두 그림 을 켜 는 것 이 아 닙 니까?
    10 조 네트. - 화력 다.
    4. 과정 총화
    이번 파충류 의 설명 은 여기까지 입 니 다.
  • urllib 2 모듈, HTML 코드 획득
  • re 모듈, HTML 코드 를 분석 하여 우리 가 원 하 는 것 을 얻 습 니 다
  • os 모듈 과 내장 함수 open, 파일 쓰기 및 작업 폴 더
  • threading 모듈, 스 레 드 를 증가 하여 파충류 의 효율 을 가속 화 하 는 목적
  • 이런 모듈 의 사용 은 모두 어렵 지 않다. 어 려 운 것 은 사고방식 이다. 첫째, 둘째, 셋째, 넷 째 부분 은 함수 간 의 매개 변수 전달 (파일 경로 와 url 링크 경로 의 해체, 합병) 을 대량으로 설 명 했 고 이 부분 만 코드 에 집중 했다.
    파충류 에 관심 이 있 으 면 scrapy 라 는 파충류 프레임 워 크, 전송 문 을 배 우 는 것 을 권장 합 니 다.
    Python 3 튜 토리 얼, 프로젝트 사이트 - 전송 문

    좋은 웹페이지 즐겨찾기