如何正确使用以下示例中的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?'
答案 0 :(得分:1)
你有一个for
循环尝试加入4个线程中的每一个,并且超时为2秒。
第一次.join()
通话需要2秒钟,然后超时。第二个做同样的事情。第三个线程在5秒后完成(第三个.join(2)
调用后1秒),第四个线程在加入时已经完成。 2 + 2 + 1 = 5.