Python中的线程可以处于以下五个状态之一:
-
新建状态(New):当我们创建了一个线程对象时,线程对象处于新建状态。这个状态可以通过调用线程对象的start()方法启动线程,使线程进入就绪状态。
-
就绪状态(Runnable):当线程启动后,处于就绪状态,此时线程已经分配了所有应该分配的资源,只等待CPU资源的调度执行。正在等待CPU资源的线程也称之为可以被调度的线程。
-
运行状态(Running):通过操作系统的调度机制,就绪状态的线程被CPU选中,进入运行状态。此时线程的代码为正在执行状态。
示例:
import threading
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print("Hello from thread")
# 新建状态
t1 = MyThread()
# 就绪状态
t1.start()
# 运行状态
- 阻塞状态(Blocked):当线程在等待某个条件(如I/O操作完成)的时候,它就会进入阻塞状态,此时该线程不消耗CPU资源。当条件满足时,线程重新进入就绪状态,等待操作系统的调度。
示例:
import threading, time
def fun():
time.sleep(2)
print("Hello from thread")
# 新建状态
t1 = threading.Thread(target=fun)
# 就绪状态
t1.start()
# 阻塞状态
time.sleep(1)
# 就绪状态
- 终止状态(Terminated):线程的run()方法运行完毕,或者在运行过程中抛出异常,线程就会进入终止状态。
示例:
import threading
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print("Hello from thread")
# 新建状态
t1 = MyThread()
# 就绪状态
t1.start()
# 运行状态
# 终止状态