首先来体验下什么是多线程:

如图:利用多线程同时执行sing和worker2个函数:

'''多线程'''
import time
import threading

def sing():
    '''唱歌5秒钟'''
    for i in range(3):
        print("---正在唱歌---")
        time.sleep(1)
# todo 创建Thread时执行的函数,运行结束,那么这个子线程就结束了
def worker():
    '''工作5秒钟'''
    for i in range(3):
        print("---正在工作---")
        time.sleep(1)

def run():
    t1 = threading.Thread(target=sing)
    t2 = threading.Thread(target=worker)
    t1.start()
    t2.start()
if __name__ == '__main__':
    run()

 

 

线程的创建从调用start方法开始,函数结束时,线程结束。

如图、;

'''多线程'''
import time
import threading


def sing():
    '''唱歌5秒钟'''
    for i in range(5):
        print("---第{}次唱歌---".format(i))
        time.sleep(1)
# todo 创建Thread时执行的函数,运行结束,那么这个子线程就结束了

def worker():
    '''工作5秒钟'''
    for i in range(5):
        print("---第{}次工作---".format(i))
        time.sleep(1)


def run():
    t1 = threading.Thread(target=sing)
    t2 = threading.Thread(target=worker)
    t1.start()    # TODO 调用start时,线程创建。函数结束的时候,线程结束。
    t2.start()
    while True:
        print(threading.enumerate())
        if len(threading.enumerate()) == 1:
            return
        time.sleep(1)


if __name__ == '__main__':
    run()

在类里面实现多线程,必须定义run方法,启动线程时实际是调用的run方法:

import threading
import time

class MyThreading(threading.Thread):
    def run(self):
        '''通过继承调用多线程必须有run方法'''
        for i in range(5):
            print("这是线程{}".format(i))
            time.sleep(1)
            self.mut()

    def mut(self):
        for i in range(1,10):
            for j in range(1,i+1):
                print("{}*{}={}".format(i,j,(i*j)),end='\t')
            print()

if __name__ == '__main__':
    mt = MyThreading()
    mt.start()

 使用sleep来控制,线程的执行顺序: