进程 Progress: 本质上就是一段程序运行的过程

线程 Thread: 线程是进程里面的执行单元

 

1. 线程的基本调用

import threading
import  time

def hi_thread(i):
    time.sleep(3)
    print('thread %s'%i)


if __name__ == '__main__':
    t1=threading.Thread(target=hi_thread,args=(1,))
    t2=threading.Thread(target=hi_thread,args=(2,))
    t3=threading.Thread(target=hi_thread,args=(3,))
    t4=threading.Thread(target=hi_thread,args=(4,))

    t1.start()   # 线程1
    t2.start()   # 线程2
    t3.start()   # 线程3
    t4.start()   # 线程4
    print('main thread') # 主线程

 

join 方法: 当线程调用 join方法以后,排在join后面的线程必须在该调用join方法的线程完成之后再执行

 

2. 线程的 join 方法

import threading
import time


def music():
    print('start listen to music... %s' % time.ctime())
    time.sleep(3)
    print('end to music...%s' % time.ctime())


def game():
    print('start play to game...%s' % time.ctime())
    time.sleep(6)
    print('end to game...%s' % time.ctime())


if __name__ == '__main__':
    t1 = threading.Thread(target=music, args=())
    t2 = threading.Thread(target=game, args=())

    t1.start()
    t2.start()

    t1.join()    # t1 不结束, main线程就不会执行,因为main线程排在 join的后面

    print('main thread %s' % time.ctime())  # 主线程

 

 

setDaemon方法:

守护线程;当我们在程序的运行当中,执行一个主线程,如果主线程有创建了子线程,那么主线程和子线程就

兵分两路分别运行,当主线程完成之后程序想退出的时候,会检查子线程是否完成,如果子线程未完成,则主线程会等待子线程完成之后

再退出,但是有时候我们需要的是只要主线程完成后,不管子线程有没有完成,都要和主线程一起退出,这时候子线程就要设置setDaemom方法。

setDaemon必须设置在线程start之前。


3.线程setDaemom方法

import threading
import time


def music():
    print('start listen to music... %s' % time.ctime())
    time.sleep(3)
    print('end to music...%s' % time.ctime())


def game():
    print('start play to game...%s' % time.ctime())
    time.sleep(6)
    print('end to game...%s' % time.ctime())


if __name__ == '__main__':
    t1 = threading.Thread(target=music, args=())
    t2 = threading.Thread(target=game, args=())
    t2.setDaemon(True)

    t1.start()
    t2.start()

 

 

4.线程其他基本方法

t1.getName()  # 得到线程名
t1.setName('线程1')  # 设置线程名
t1.is_alive() # 线程是否活着
threading.active_count()  # 返回正在运行线程的数量