2013-01-14 19 views
2

試圖學習多線程。我下載了一些示例代碼一起玩,和我結束了這一點:未分配Python線程名稱

import threading 
import time 

class myThread (threading.Thread): 
    def __init__(self, threadID, name, delay, counter): 
     super().__init__() 
     self.threadID = threadID 
     self.name = name 
     self.delay = delay 
     self.counter = counter 
     threading.Thread.__init__(self) 
     print(name,"created") 
     print(self.name,"created") 
    def run(self): 
     print ("Starting " + self.name) 
     print_time(self.name, self.delay, self.counter) 
     print ("Exiting " + self.name) 

def print_time(threadName, delay, counter): 
    while counter: 
     time.sleep(delay) 
     print (threadName, time.ctime(time.time())) 
     counter -= 1 

# Create new threads 
thread1 = myThread(1, "a", 1, 5) 
thread2 = myThread(2, "b", 2, 3) 

# Start new Threads 
thread1.start() 
thread2.start() 
thread1.join() 
thread2.join() 

print ("Exiting Main Thread") 

但我的輸出是出乎意料的,至少可以說。

a created 
Thread-2 created 
b created 
Thread-4 created 
Starting Thread-2 
Starting Thread-4 
Thread-2 Mon Jan 14 16:14:29 2013 
Thread-2 Mon Jan 14 16:14:30 2013 
Thread-4 Mon Jan 14 16:14:30 2013 
Thread-2 Mon Jan 14 16:14:31 2013 
Thread-2 Mon Jan 14 16:14:32 2013 
Thread-4 Mon Jan 14 16:14:32 2013 
Thread-2 Mon Jan 14 16:14:33 2013 
Exiting Thread-2 
Thread-4 Mon Jan 14 16:14:34 2013 
Exiting Thread-4 
Exiting Main Thread 

爲什麼不指定self.name後評估爲「a」或「b」?

回答

4

namethreading.Thread.__init__(self)中獲得重新初始化。沒有理由兩次調用父構造函數。

+0

+1。另外,你可以通過執行'super().__ init __(name = name)'將名字傳遞給父類。 – abarnert

+0

哦,我錯過了第二個。謝謝! –