확장: 다 중 스 레 드 전개, 난이도 중간 -- wh 05
실험 설명
1. 환경 로그 인
비밀번호 없 이 자동 로그 인, 시스템 사용자 이름 shiyanlou
2. 환경 소개
이 실험 환경 은 데스크 톱 이 있 는 Ubuntu Linux 환경 을 사용 합 니 다. 실험 에 서 는 데스크 톱 프로그램 을 사용 합 니 다.
1. Xfce 터미널: Linux 명령 행 터미널, 열 면 Shell 환경 에 들 어 갑 니 다. Linux 명령 을 사용 할 수 있 습 니 다.
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. 과정 총화
이번 파충류 의 설명 은 여기까지 입 니 다.
파충류 에 관심 이 있 으 면 scrapy 라 는 파충류 프레임 워 크, 전송 문 을 배 우 는 것 을 권장 합 니 다.
Python 3 튜 토리 얼, 프로젝트 사이트 - 전송 문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.