多任务
线程
并行与并发
并行:真的多任务,多个程序同时执行
并发:假的多任务,快速在各个程序间切换
threading模块
python的threading模块是对thread做了一些包装,使其能够更加方便的被使用
例:
import time
import threading
def say_sorry(): # 子线程
print("对不起")
time.sleep(1)
if __name__ == '__main__':
for i in range(5):
t = threading.Thread(target=say_sorry) # 注意函数名后面不要加()
t.start() # 主线程
查看线程数
如果给线程添加延时(即time.sleep),则程序的先后执行顺序无法确定
注:只有调用start()的时候才会创建线程
例1:添加延时,顺序执行
import threading
import time
def test1():
for i in range(5):
print("----test1----%d" % i)
def test2():
for i in range(5):
print("----test2----%d" % i)
def main():
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
time.sleep(0.1)
print("-----1-----")
t2.start()
time.sleep(0.1)
print("-----2-----")
print(threading.enumerate())
'''enumerate()方法用于查看当前正在运行的线程,
因为此程序添加了延时,所以这是只会显示主程序的线程'''
if __name__ == "__main__":
main()
>>[out]:
----test1----0
----test1----1
----test1----2
----test1----3
----test1----4
-----1-----
----test2----0
----test2----1
----test2----2
----test2----3
----test2----4
-----2-----
[<_MainThread(MainThread, started 14496)>]
例2:给主线程和子线程都设置延时,监控同时运行的线程数量,test1先运行完,对应线程也结束,等只剩下主线程运行时就结束
import threading
import time
def test1():
for i in range(5):
print("----test1----%d" % i)
time.sleep(1)
def test2():
for i in range(10):
print("----test2----%d" % i)
time.sleep(1)
def main():
t1 = threading.Thread(