Thread子类的封装
使用threading模块可以完成多任务程序开发。为了让各个线程的封装更加完善,在使用threading模块的时候,往往会定义一个新的子类,只要继承threading.Thread,然后重新写run方法即可。
#coding=utf-8
import threading
import time
class MyThread1(threading.Thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字
print(msg)
class MyThread2(threading.Thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字
print(msg)
if __name__ == '__main__':
t1 = MyThread1()
t2 = MyThread2()
t1.start()
t2.start()
运行结果为:
说明:
Python的threading.Thread类有一个run方法来定义线程的函数功能,可以在自己的线程类中重写。
创建自己的线程实例后,可以通过Thread类的start方法启动线程。当线程得到执行的机会时,它会调用run方法来执行线程。
2. 线程的执行顺序
#coding=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) #name属性中保存的是当前线程的名字
print(msg)
def test():
for i in range(1,5):
t=MyThread()
t.start()
if __name__ == '__main__':
test()
运行结果为:
说明:
从代码和执行结果可以看出,多线程程序的执行顺序是不确定的。当sleep语句执行时,线程会被阻塞(Blocked),sleep结束后,线程会进入就绪(Runnable)状态,等待调度。线程调度会选择一个线程自己执行。以上代码只能保证每个线程运行整个run函数,但无法确定run函数中线程的启动顺序和每个循环的执行顺序。
总结:
每个线程都必须有一个名字,虽然上面的例子中没有指定线程对象的名字,但是python会自动给线程分配一个名字。
当线程的run()方法结束时该线程完成。
你无法控制线程调度程序,但可以通过其他方式影响线程调度方式。
线程的几种状态
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python中传递参数01/13
- ♥ 如何在python中生成随机的非重复数组09/19
- ♥ Python 的 lambda 表达式11/29
- ♥ 如何在 python 中安装和使用 Graphviz?10/10
- ♥ python的快捷键有哪些?08/13
- ♥ python中的制表符是什么意思08/21
内容反馈