Python 2.4에 포함된 최신 스레딩 모듈은 이전 섹션에서 논의한 스레드 모듈보다 훨씬 강력하고 높은 수준의 스레드 지원을 제공합니다.
threading 모듈은 thread 모듈의 모든 메소드를 노출하고 몇 가지 추가 메소드를 제공합니다 -
- threading.activeCount() − 활성 스레드 개체의 수를 반환합니다.
- threading.currentThread() − 호출자의 스레드 컨트롤에 있는 스레드 개체의 수를 반환합니다.
- threading.enumerate() − 현재 활성화된 모든 스레드 개체의 목록을 반환합니다.
메서드 외에도 스레딩 모듈에는 스레딩을 구현하는 Thread 클래스가 있습니다. Thread 클래스에서 제공하는 메소드는 다음과 같습니다 -
- 실행() − run() 메서드는 스레드의 진입점입니다.
- 시작() − start() 메서드는 run 메서드를 호출하여 스레드를 시작합니다.
- 가입([시간]) − join()은 스레드가 종료될 때까지 기다립니다.
- isAlive() − isAlive() 메서드는 스레드가 아직 실행 중인지 여부를 확인합니다.
- getName() − getName() 메서드는 스레드의 이름을 반환합니다.
- setName() − setName() 메서드는 스레드의 이름을 설정합니다.
스레딩 모듈을 사용하여 스레드 생성
스레딩 모듈을 사용하여 새 스레드를 구현하려면 다음을 수행해야 합니다. -
- Thread 클래스의 새 하위 클래스를 정의합니다.
- __init__(self [,args]) 메서드를 재정의하여 추가 인수를 추가합니다.
- 그런 다음 run(self [,args]) 메서드를 재정의하여 스레드가 시작될 때 수행해야 하는 작업을 구현합니다.
새 Thread 하위 클래스를 만든 후에는 해당 인스턴스를 만든 다음 start()를 호출하여 새 스레드를 시작할 수 있습니다. 그러면 run() 메서드가 호출됩니다.
예시
#!/usr/bin/python import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name print_time(self.name, 5, self.counter) print "Exiting " + self.name def print_time(threadName, counter, delay): while counter: if exitFlag: threadName.exit() time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() print "Exiting Main Thread"
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다 -
Starting Thread-1 Starting Thread-2 Exiting Main Thread Thread-1: Thu Mar 21 09:10:03 2013 Thread-1: Thu Mar 21 09:10:04 2013 Thread-2: Thu Mar 21 09:10:04 2013 Thread-1: Thu Mar 21 09:10:05 2013 Thread-1: Thu Mar 21 09:10:06 2013 Thread-2: Thu Mar 21 09:10:06 2013 Thread-1: Thu Mar 21 09:10:07 2013 Exiting Thread-1 Thread-2: Thu Mar 21 09:10:08 2013 Thread-2: Thu Mar 21 09:10:10 2013 Thread-2: Thu Mar 21 09:10:12 2013 Exiting Thread-2