首先明白进行与线程概念:
- 什么是进程
正在运行的一个应用程序就是一个进程,一个进行包括多个线程。进程会在所有线程崩溃时才结束。 - 什么是线程
a.一个进行要执行任务须要有线程(每个进行至少有一条线程)一个线程执行完了,线程就会自动结束。
b.线程特点:
线程是串行的。
多线程(并行)同时执行多个任务
c.多线程原理:
CPU在空闲时间能够其它事情(所以某种意义上说多线程并行其实是一种假象,它其实是在多个线程之间来回切换),耗时基本是其它原因造成的,比如:下载都是耗时在网络上的。
d.如果遇到希望在前面几个线程同时执行完成后在执行其它任务,就想到使用json.
e.当多个线程对同一数据操作时,可能会出现数据混乱现象,因为由于time.sleep(5)造成的。
f.多个线程对一个数据进行操作,一个线程会将数据读出来,还没来得急存。另一个子线程又去读。这个时候就会产生数据隐患。
那么,多个线程怎么避免这个问题:
解决方案:加锁
Thtead-线程类,创建子线程
Lock-锁(创建锁对象)
release-解锁
Python3 通过两个标准库 _thread 和 threading 提供对线程的支持,由于_thread只是为了兼容python2的thread模块,所以推荐使用threading模块实现多线程。
threading提供了如下方法:
- run(): 用以表示线程活动的方法。
- start():启动线程活动。
- join([time]): 等待至线程中止。
- isAlive(): 返回线程是否活动的。
- getName(): 返回线程名。
- setName(): 设置线程名。
Python中使用线程有两种方式:函数或者用类来包装线程对象。
函数方式:
导入threading包
对象名= threading.Thread(target = 函数名) 创建线程对象
对象名.start() 创建线程
注:由于代码执行过快,为了显示效果,使用sleep延时执行。
代码:
import threading
import time
def sing(num):
for i in range(num):
print("唱歌%d" % i)
time.sleep(0.5)
def dance(num):
for i in range(num):
print("跳%d" % i)
time.sleep(0.5)
def main():
"""创建启动线程"""
t_sing = threading.Thread(target=sing, args=(5,))
t_dance = threading.Thread(target=dance, args=(6, ))
t_sing.start()
t_dance.start()
if __name__ == '__main__':
main()
执行结果: