使用线程最简单的一个方法是,用一个目标函数实例化一个Thread然后调用 <span class="pre" style="box-sizing:border-box;">start()</span>
方法启动它。Python的threading模块提供了 <span class="pre" style="box-sizing:border-box;">Thread()</span>
方法在不同的线程中运行函数或处理过程等。
class threading.Thread(group=None,
target=None,
name=None,
args=(),
kwargs={})
上面的代码中:
<span class="pre" style="box-sizing:border-box;">group</span>
: 一般设置为 <span class="pre" style="box-sizing:border-box;">None</span>
,这是为以后的一些特性预留的<span class="pre" style="box-sizing:border-box;">target</span>
: 当线程启动的时候要执行的函数<span class="pre" style="box-sizing:border-box;">name</span>
: 线程的名字,默认会分配一个唯一名字 <span class="pre" style="box-sizing:border-box;">Thread-N</span>
<span class="pre" style="box-sizing:border-box;">args</span>
: 传递给 <span class="pre" style="box-sizing:border-box;">target</span>
的参数,要使用tuple类型<span class="pre" style="box-sizing:border-box;">kwargs</span>
: 同上,使用字典类型dict创建线程的方法非常实用,通过`target`参数、`arg`和`kwarg`告诉线程应该做什么。下面这个例子传递一个数字给线程(这个数字正好等于线程号码),目标函数会打印出这个数字。
让我们看一下如何通过threading模块创建线程,只需要几行代码就可以了:
import threading
def function(i): print ("function called by thread %i\n" % i) return
threads = []
for i in range(5): t = threading.Thread(target=function , args=(i, )) threads.append(t) t.start() t.join()
上面的代码运行结果如下:
注意,输出的顺序可能和上图不同。事实上,多个线程可能同时向 <span class="pre" style="box-sizing:border-box;">stdout</span>
打印结果,所以输出顺序无法事先确定。
All comments