setDeamon 재귀 잠금 Rlock 가입 스레딩 멀티 스레드 데몬 스레드의 파이썬 기준

이 차이에 대한 간략한 개요로 시작 멀티 스레드 및 멀티 프로세스, 그들은 다른 블로그 검색에서 볼 수있는 상세한 이론적 차이는, 여기를 반복하지

동일한 프로세스의 다중 스레드 하에서 공유 메모리의 데이터를, 서로 작동 할 수있는 일차 및 이차 다중 스레드 사이에 관계가 없다, CPU 스레드가 실행되어, 메인 쓰레드 열리는 기본 프로그램, 프로세스, 절차는 절차와 관련된 자원이다 수집 일부 시나리오는 우리가 멀티 스레딩의 기본 사항의 일부에 대한 간략한 설명 다음, 프로그램의 효율성을 향상의 목적을 달성하기 위해 여러 스레드를 사용할 수 있습니다

간단한 멀티 스레드

. (1)  오기 스레딩 시간
 2  
3.  DEF TEST1 (X)
 . (4)      . (5 time.sleep )
 . (5)      인쇄 (X ** X)
 . 6  
. 7  # 1 TEST1 아래 두 스레드가 다중 스레드, 타겟 다시 만들 다음 구문을 사용하여,이 함수를 호출 규정 함수 이름, 인수 인수 전달 튜플의 형태 인자를 전달할 필요로 
. 8 START_TIME = 로 time.time ()
 . 9 threading.Thread의 T1 = (목표 = TEST1, 인수 =. (5 ))
 10 threading.Thread의 T2 = ( = TEST1 타겟, 인수 =. (6 ))
 . 11  # 개시는 다중 스레드 
(12)가  t1.start ()
 (13)는  () t2.start
 14 END_TIME가 = 로 time.time ()를
 15= END_TIME의 TOTAL_TIME - start_time을
 16  인쇄 ( " 두 %가 시간 사용 스레드 S " %의 TOTAL_TIME) # 멀티 스레딩의 사용, T1의 T2는 대기 기간 후 뒤로 가서 계속하기 전에 프로그램을 실행 시작되지 않습니다, 메인 프로그램 때문에 메인 스레드 T1 병렬 실행 T2, 메인 프로그램이 동작이 완료되지 T1에서 T2 않았다 수행 
(17)  
(18)에게 (6 time.sleep를 )
 19  # 개수를 비교 다중 스레드 시작 장시간 루프에 사용될 수의 결과가 출력 될 수 있으며, 병렬 실행을 멀티 스레드 시동 순서가 인쇄 될 
20  대한 I  범위 (5. )
 (21)는      threading.Thread의 T3 = (목표 = TEST1, 인수 =이 (나))
 (22)는      t3.start ()가
 23 인 time.sleep. (6)

비 메인 쓰레드의 메인 쓰레드 대기가 실행을 계속하기 전에 종료 방법을 결합

1  # 경우 다음 주 스레드 데이터 전에 실행되는 것을 처리가있을 수 있고, 자식 스레드가 완료된 후 주 스레드를 실행할 필요 
2 START_TIME1 = 로 time.time ()
 . 3 TL = [] #의 객체 저장 스레딩 뒤에 최대로 조인 f 
4.  위해 I  범위 (5. )
 . 5      threading.Thread의 T4을 = (목표 = TEST1, 인수 = (I))
 . 6      t4.start ()
 . 7      tl.append (T4)
 8.  위한 T  TL : # 멀티 스레드에 가입, 메인 쓰레드 다음 계속 완료 후 참석하기 위해 하위 스레드 실행을 가입 할 수 있습니다. 
. 9      t.join ()
 10 END_TIME1 = 로 time.time ()
 . 11 total_time1 = END_TIME1 - START_TIME1
12  인쇄 (total_time1은) # 실행 시간은 5 초에 관하여이다

 

1  #은 얼마나 더이 여러 자식 스레드가 메인 스레드의 일부를 조인하는 경우를 다루는? ? ? 자식 스레드에 참여하지, 계속 기다려 아직 실행 주 스레드에 가입 할 자식 스레드 자식 스레드 주 스레드에 가입의 가장 긴 부분의 종료 후 가입 병렬 
2 T5 = threading.Thread (대상 = TEST1, 인수 = (5 ))
 . (3) threading.Thread의 T6 = (목표 = TEST1, 인수 =. (6 ))
 . 4  t5.start ()
 . 5  t6.start ()
 . 6 t5_join_start_time = 로 time.time ()
 . 7  t5.join ()
 . 8 time.sleep (10 )
 . 9 t5_join_end_time가 = 로 time.time ()
 10  인쇄 ( " T5 시간의 S %의 가입은 IS " ) - t5_join_start_time (t5_join_end_time %) # 실제 소모 15S

 

데몬 스레드 setDeamon

1  # 다른 스레드를 기다리지 않고, 즉시 종료 다른 모든 스레드의 메인 쓰레드의 종료 후,이다 데몬 완성이며, 일반적으로도 메인 스레드에 가입 추가하지 않고 종료 다른 스레드, 당신은 모두 종료되지 기다려야 않는 미완성 프로그램을 완료 할 때 스레드가이 말에 메인 프로그램과 유사한 프로그램이 끝나기 전에 완료 기본 가입 
2  DEF의 TEST1 (X 축)을 :
 3      time.sleep (5 )
 4      인쇄 ( " 나는 타 스레드 " 는 X - ** X 축)
 (5)  
(6)  에 대한에서 범위 (. 5 )
 . 7      threading.Thread의 T = (목표 = TEST1, 인수 = (I))
 . 8      t.setDaemon (참)
 . 9      t.start ()
 10  
. 11  인쇄 ( " 메인 스레드가 완료 " ) #전체 프로그램 종료는 인쇄 작업을 직접 종료 완료 데몬 스레드 기다리지 않습니다

재귀 잠금 Rlock

1  # 재귀 잠금, 당신은 잠금 논리 오류를 해제 이어질 수 재귀를 사용하지 않는 경우 잠금이, 전체 프로그램은 빗나갔습니다 잠금 안에 중첩 잠금, 재귀 잠금 프로그램의 사용 해제 잠금을 보장하기 위해, 데이터 구조의 잠금을 해제하기 위해 잠금을 유지 아무 문제 
2 잠금 = threading.Lock과의 ()
 . 3  DEF의 TEST2 ()
 . 4      lock.acquire ()
 . 5      인쇄 ( " 이 본가 TEST2 IS " )
 6.      lock.release ()
 7.  
8.  DEF 테스트 3 ()
 . 9      lock.acquire ()
 10      인쇄 ( " 은이 테스트 3 IS " )
 . 11      lock.release ()
 (12)가  
13  DEF : TEST4 ()
 14      ) lock.acquire (
 15     TEST2 ()
 16      인쇄 ( " 이 본 TEST4이다 " )
 . 17      테스트 3 ()
 (18)가된다      lock.release ()
 . 19  
(20)가 threading.Thread = (목표 =의 rlock_test TEST4)
 21 인  rlock_test.start ()
 (22)가  
23  그동안 threading.active_count ()! = 1 :
 24      인쇄 ( " 현재 COUNT는 스레드 " , threading.active_count ()) # 전체 프로그램은 두 개의 스레드로 인쇄 된 전체 프로그램을 종료 할 수없는 비 중첩 잠금 문제 원인의 메인 쓰레드가 붙어 
25      time.sleep (1)

로크 = threading.Lock과 ()는 잠금 = 전체 프로그램이 정상적으로 종료 할 수 threading.RLock ()에 수정 된 정상 단부 출력 이하

TEST2이다 
이 TEST4이다
현재 스레드 수가 2 인
이있다 TEST3

 

추천

출처www.cnblogs.com/flags-blog/p/12443307.html