在python中,多线程用到threading模块中的Thread类。
start()重载了run()方法,两者是一样的。
join([timeout]):如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,那么在调用这个线程时可以使用被调用线程的join方法。当传入一个超时时间,如果到时间了还没完成,也会继续运行主线程。
setDemon([flag]):这个方法基本和join是相反的。当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,此时主线程与子线程并发进行,那么当主线程完成想退出时,会检验子线程是否完成。如果子线程未完成,则主线程会等待子线程完成后再退出。这样我们可以用setDemon()方法,可选参数True/False,当为默认值为False。
代码:
import threading
import time
class myThread(threading.Thread):
def __init__(self, threadName):
threading.Thread.__init__(self, name = threadName)
def run(self):
time.sleep(1)
for i in range(10):
print self.name + " " , i
t1 = myThread("t1")
t2 = myThread("t2")
t3 = myThread("t3")
t1.setDaemon(True)
t1.start()
t2.start()
t2.join(3)
t3.start()
i = 1
while threading.activeCount() > 1:
time.sleep(1)
print "I am main thread
输出:
t1 t2 0 0
t1 1
t1 2
t1 3
t1 4
t1 5
t1 6
t1 7
t1 8
t1 9
t2 1
t2 2
t2 3
t2 4
t2 5
t2 6
t2 7
t2 8
t2 9
t3 0
t3 1
I am main thread
t3 2
t3 3
t3 4
t3 5
t3 6
t3 7
t3 8
t3 9
I am main thread