当一个进程启动之后,会默认产生一个线程。这个线程就是主线程
。如果是多线程时,主线程会创建多个线程。主线程执行完成后就会退出。多线程执行完成后也会退出。
注意
:只有守护的子线程退出后,主进程才会退出。
import threading
print(threading.current_thread().getName())
def test1():
for i in range(3):
print(threading.current_thread().getName(), i)
def test2():
for i in range(3):
print(threading.current_thread().getName(), i)
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()
print(threading.current_thread().getName())
MainThread
为主进程,主进程子线程还没有执行完毕就退出了
MainThread
Thread-1 Thread-2 0
MainThread
0
Thread-1 1
Thread-1 Thread-2 2
1
Thread-2 2
join守护所有线程
守护线程,主线程等待被守护线程执行结束后主线程才退出。
import threading
import time
print(threading.current_thread().getName())
def test1():
for i in range(3):
print(threading.current_thread().getName(), i)
def test2():
for i in range(3):
time.sleep(1)
print(threading.current_thread().getName(), i)
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()
# 守护线程
t1.join()
t2.join()
print(threading.current_thread().getName())
主线程等待子线程后再退出
MainThread
Thread-1 0
Thread-1 1
Thread-1 2
Thread-2 0
Thread-2 1
Thread-2 2
MainThread
join守护一些线程
import threading
import time
print(threading.current_thread().getName())
def test1():
for i in range(3):
print(threading.current_thread().getName(), i)
def test2():
for i in range(3):
# 为了看的清楚
time.sleep(1)
print(threading.current_thread().getName(), i)
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()
# 守护t1
t1.join()
print(threading.current_thread().getName())
t2还没有退出主线程已经退出了
MainThread
Thread-1 0
Thread-1 1
Thread-1 2
MainThread
Thread-2 0
Thread-2 1
Thread-2 2
此时,可以守护t2
或者守护所有达到守护线程的目的。
join参数
timeout
等待单位为秒后无论子线程是否退出,主线程都将退出。
多线程实现方式
上面为一种,还有一种基于类实现。推荐使用类实现--更加优雅!!
标签:join,Thread,python,getName,current,threading,线程,print,多线程 From: https://blog.51cto.com/u_14967494/6054736