擅长:python、mysql、java
<p>最好的例子是:</p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
###############################################################################
from __future__ import (absolute_import, division, print_function)
# unicode_literals)
import threading
import time
def func1():
time.sleep(10)
print('Func1: Out of sleep and returning')
def func2(flag):
while not flag:
time.sleep(1)
print('Func2: looping')
print('Func2: Flag set, leaving')
t1 = threading.Thread(target=func1)
f = list()
t2 = threading.Thread(target=func2, kwargs=dict(flag=f))
t1.start()
t2.start()
t1.join()
f.append(None)
</code></pre>
<p>带输出:</p>
^{pr2}$
<p>从输出可以明显看出,即使<code>t1</code>(第一个线程)在<code>10</code>秒的长时间<code>time.sleep</code>被阻塞,第二个线程<code>t2</code>仍在运行。在</p>
<p>甚至当<code>t1</code>完成时,我们看到主线程能够<code>append</code>到列表中,该列表被用作<code>flag</code>,让{<cd4>}理解它必须返回并因此结束。在</p>
<p>所以:<code>time.sleep</code>只阻塞正在执行的线程。在</p>