python 다 중 스 레 드 와 global 변수 에 대한 상세 한 설명

오늘 아침 에 일어나 서 파충 류 를 썼 는데 기본 프레임 워 크 가 다 되 었 고 다 중 스 레 드 기어 오 르 기 기능 을 추 가 했 을 때 오류 가 발생 했 습 니 다.
예 를 들 어 파일 을 다운로드 한 url 목록 에 200 개의 url 을 추가 하여 50 개의 스 레 드 를 엽 니 다.내 파충류...50 개의 url 을 기어 오 르 고 모두 0.html 라 고 이름 을 지 었 다.즉,마지막 다운로드 결 과 는 0.html(중복 되 는 커버)1 개,그리고 1-150 이 었 다.다음은 제 코드 입 니 다.

x = str(theguardian_globle.g)
 #x          
 filePath = "E://wgetWeiBao//"+x+".html"
 try:
  wget.download(url,filePath)
  theguardian_globle.g+=1
  print x+" is downloading..."
 
 except:
  print "error!"

#       g   
global g
 
g = 0
나중에 문 제 를 발견 했다.다 중 스 레 드+전역 변 수 는 위험한 조합 이다.프로그램 이 여러 스 레 드 가 동시에 실행 되 고 여러 스 레 드 가 동시에 전체 변 수 를 조작 하면 혼란 을 일 으 킬 수 있 기 때문이다.다 중 스 레 드 에서 전역 변 수 를 조작 하려 면 이 작업 에 자 물 쇠 를 추가 해 야 합 니 다.
다음은 수 정 된 코드 입 니 다.

  :
 
def downLoad(url,num):
 x = str(num)
 filePath = "E://wgetWeiBao//"+x+".html"
 try:
  wget.download(url,filePath)
  print x+" is downloading..."
 
 except:
  print "error!"

      _            
class Cosumer(threading.Thread):
 def run(self):
  print('%s:started' % threading.current_thread())
 
  while True:
   global gCondition
   gCondition.acquire()
   while q.empty()==True:
    gCondition.wait()
   url = q.get()
   num = theguardian_globle.g
   theguardian_globle.g+=1
   gCondition.release()
   downLoad(url,num)
큰 성 과 를 거두다.
이 편 은 python 다 중 스 레 드 와 global 변 수 를 상세 하 게 설명 하 는 것 이 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기