Python多线程(一):多线程的创建

在python3中,多线程主要使用threading模块

首先,来看一个单任务模式的例子

import datetime,time


def eat_hotpot(food):
    for i in range(2):
        print(datetime.datetime.now().strftime('%X') + ' ' + "eat " + str(food))
        time.sleep(2) #每一次调用耗时2s


def watch_TV(movie):
    for i in range(2):
        print(datetime.datetime.now().strftime('%X') + ' ' + "watch " + str(movie))
        time.sleep(2) #每一次调用耗时2s


if __name__ == '__main__':
    eat_hotpot("毛肚")
    watch_TV("末代皇帝")
    print(datetime.datetime.now().strftime('%X') + ' ' + "吃火锅,看电视都结束啦~~")
14:45:35 eat 毛肚
14:45:37 eat 毛肚
14:45:39 watch 末代皇帝
14:45:41 watch 末代皇帝
14:45:43 吃火锅,看电视都结束啦~~
#时间都相隔2s,运行完程序,耗时8s

运行的结果如上,可以看出,每调用一次耗时2s,整个程序是线性执行的。

接下来我们将程序改造一下:

import threading
import datetime,time


def eat_hotpot(food):
    for i in range(2):
        print(datetime.datetime.now().strftime('%X') + ' ' + "eat " + str(food))
        time.sleep(2)


def watch_TV(movie):
    for i in range(2):
        print(datetime.datetime.now().strftime('%X') + ' ' + "watch " + str(movie))
        time.sleep(2)


if __name__ == '__main__':
   #创建两个子线程 t1
= threading.Thread(target=eat_hotpot,args=('毛肚',)) t2 = threading.Thread(target=watch_TV,args=('末代皇帝',))
   #启动两个线程 t1.start() t2.start()
#主线程
print(datetime.datetime.now().strftime('%X') + ' ' + "吃火锅,看电视都结束啦~~")
14:49:43 eat 毛肚
14:49:43 watch 末代皇帝
14:49:43 吃火锅,看电视都结束啦~~  #可以看到eat_hotpot,watch_TV,和主线程都在14:49:43这一时刻同时启动
14:49:45 watch 末代皇帝   #主线程结束后,子线程继续执行
14:49:45 eat 毛肚  #运行完程序,耗时2s       

使用threading模块创建多线程,最主要是使用Thread这个类,创建Thread对象后,让他运行,给个Thread代表一个线程,在每个线程中让程序处理不同的任务,这就是多线程编程

threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

target:线程调用的对象,就是函数名,注意不用写括号

name:线程的名字,默认值为“Thread-N“,N是一个数字。

args:为目标函数传递的参数,元组,如果只有一个参数,需要有逗号

kwargs:为目标函数传递的关键字参数,字典

另外该模块还有如下的一些方法和属性

current_thread()   #当前线程
Thread.getName() #获取线程name
Thread.setName() #设置线程name
Thread.ident #获取线程标识符
Thread.is_alive()
Thread.isAlive()  #判断线程是否激活