0
点赞
收藏
分享

微信扫一扫

python 多线程 join

当一个进程启动之后,会默认产生一个线程。这个线程就是主线程。如果是多线程时,主线程会创建多个线程。主线程执行完成后就会退出。多线程执行完成后也会退出。

注意:只有守护的子线程退出后,主进程才会退出。

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等待单位为秒后无论子线程是否退出,主线程都将退出。

多线程实现方式

上面为一种,还有一种基于类实现。推荐使用类实现--更加优雅!!

举报

相关推荐

0 条评论