python多线程编程2—线程的建设、启动、挂起和退出
如上一节,python的threading.Thread类有一个run要领,用于界说线程的成果函数,可以在本身的线程类中包围该要领。而建设本身的线程实例后,通过Thread类的start要领,可以启动该线程,交给python虚拟机举办调治,当该线程得到执行的时机时,就会挪用run要领执行线程。让我们开始第一个例子:
# encoding: UTF-8 import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) print msg def test(): for i in range(5): t = MyThread() t.start() if __name__ == '__main__': test()
执行功效:
I'm Thread-1 @ 0
I'm Thread-2 @ 0
I'm Thread-5 @ 0
I'm Thread-3 @ 0
I'm Thread-4 @ 0
I'm Thread-3 @ 1
I'm Thread-4 @ 1
I'm Thread-5 @ 1
I'm Thread-1 @ 1
I'm Thread-2 @ 1
I'm Thread-4 @ 2
I'm Thread-5 @ 2
I'm Thread-2 @ 2
I'm Thread-1 @ 2
I'm Thread-3 @ 2
从代码和执行功效我们可以看出,多线程措施的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep竣事后,线程进入停当(Runnable)状态,期待调治。而线程调治将自行选择一个线程执行。上面的代码中只能担保每个线程都运行完整个run函数,可是线程的启动顺序、run函数中每次轮回的执行顺序都不能确定。
另外需要留意的是:
1.每个线程必然会有一个名字,尽量上面的例子中没有指定线程工具的name,可是python会自动为线程指定一个名字。
2.当线程的run()要领竣事时该线程完成。
3. 无法节制线程调治措施,但可以通过此外方法来影响线程调治的方法。
上面的例子只是简朴的演示了建设了线程、主动挂起以及退出线程。下一节,将接头用互斥锁举办线程同步。