如何在Python线程中正确使用join(timeout)?

时间:2014-06-06 19:51:26

标签: python multithreading

如何正确使用以下示例中的join(超时)函数?超时似乎没有对主线程执行产生影响。从文档中,主线程被阻塞,直到线程加入或超时。

import threading,time

class Server(threading.Thread):

    def __init__(self, hostname):
        super(Server, self).__init__()
        self.__hostname = hostname

    def run(self):
        print self.__hostname+' left'
        time.sleep(5)
        print self.__hostname+' back'
        sem.release()

#init
sem = threading.BoundedSemaphore(4)
threads = []

for x in xrange(1,5):
    sem.acquire()
    t = Server('thread '+str(x))
    threads.append(t)
    t.start()

for t in threads:
    t.join(2)

print 'why is this line executed by main thread 5 seconds after, not 2?'

1 个答案:

答案 0 :(得分:1)

你有一个for循环尝试加入4个线程中的每一个,并且超时为2秒。

第一次.join()通话需要2秒钟,然后超时。第二个做同样的事情。第三个线程在5秒后完成(第三个.join(2)调用后1秒),第四个线程在加入时已经完成。 2 + 2 + 1 = 5.