Discuss / Python / 多个线程执行时,join函数的位置很关键

多个线程执行时,join函数的位置很关键

Topic source

样例中给的例子都是下面的写法

t1.start()
t2.start()
t1.join()
t2.join()

但是在线程执行函数需要非常长时间时,操作系统会在t1和t2线程间不断切换,而join()的作用仅仅是使得在副线程还未执行结束时,主线程不得提前结束,所以这里的输出顺序会显得乱,改成串行,相当于阻塞,使得主线程当做两个线程中间的切换开关,下面便是例子。

from threading import *

localinfo = local()

def printName():
    n = 10
    while n > 0:
        print("thread %s >>> %s >>> %d" % (current_thread().name, localinfo.name, n))
        n -= 1

def run(name):
    localinfo.name = name
    printName()

t1 = Thread(target=run, args = ('yangboy',))
t2 = Thread(target=run, args = ('hannah',))
t1.start()
t1.join()
t2.start()
t2.join()

busyalex

#2 Created at ... [Delete] [Delete and Lock User]

thread Thread-1 >>> yangboy >>> 10 thread Thread-1 >>> yangboy >>> 9 thread Thread-1 >>> yangboy >>> 8 thread Thread-1 >>> yangboy >>> 7 thread Thread-1 >>> yangboy >>> 6 thread Thread-1 >>> yangboy >>> 5 thread Thread-1 >>> yangboy >>> 4 thread Thread-1 >>> yangboy >>> 3 thread Thread-1 >>> yangboy >>> 2 thread Thread-1 >>> yangboy >>> 1 thread Thread-2 >>> hannah >>> 10 thread Thread-2 >>> hannah >>> 9 thread Thread-2 >>> hannah >>> 8 thread Thread-2 >>> hannah >>> 7 thread Thread-2 >>> hannah >>> 6 thread Thread-2 >>> hannah >>> 5 thread Thread-2 >>> hannah >>> 4 thread Thread-2 >>> hannah >>> 3 thread Thread-2 >>> hannah >>> 2 thread Thread-2 >>> hannah >>> 1

busyalex

#3 Created at ... [Delete] [Delete and Lock User]

两个输出一样的,没区别啊~

让线sleep几秒看


  • 1

Reply