在ipython3中测试知识点:
threading中的enumerate
enumerate得到的结果是一个元组,可以通过拆包得到序号和内容
enumerate不仅可以得到子线程的数量还可以得到它本身
命令:
按下esc到命令模式
w:向右跳一个单词(word)
b:向左跳一个单词
按i进入编辑模式,删掉不需要的内容,重新输入
代码解读:
for i in range(5):
print("—test1----%d" % i)
此处的格式化打印应该是%d,而不是s%,d是整数,s是字符串
import threading
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 = thredading.Thread(target=test1)
t2 = thredading.Thread(target=test2)
t1.start()
t2.start()
print(threading.enumerate())
if __name__ == "__main__"
main()
以上代码print(threading.enumerate())最终输出的只有一个主线程,而没有子线程,因为子线程没有延时,这个主线程和两个子线程谁先执行由操作系统决定,但是不确定,三个线程在抢先后顺序。
线程的运行是没有先后顺序的,是随机的。
修改代码,验证创建thread指定函数执行结束时,子线程结束
import threading
import time
def test1():
for i in range(5):
print("---test1----%d" % i)
time.sleep(1)
def test2():
for i in range(5):
print("---test2----%d" % i)
time.sleep(1)
def main():
t1 = thredading.Thread(target=test1)
t2 = thredading.Thread(target=test2)
t1.start()
t2.start()
while True:
print(threading.enumerate())
time.sleep(1)
if __name__ == "__main__"
main()
以上代码是无限循环的,如果想让子线程执行完后,关闭主线程,需要用len(threading.enumerate())进行if判断
import threading
import time
def test1():
for i in range(5):
print("---test1----%d" % i)
time.sleep(1)
def test2():
for i in range(5):
print("---test2----%d" % i)
time.sleep(1)
def main():
t1 = thredading.Thread(target=test1)
t2 = thredading.Thread(target=test2)
t1.start()
t2.start()
while True:
print(threading.enumerate())
if len(threading.enumerate())<=1:
break
time.sleep(1)
if __name__ == "__main__"
main()
调Thread时,不会创建线程,调用start后才会创建线程并执行