赞
踩
多任务可以由多进程完成,也可以由一个进程内的多线程完成。我们说进程是由若干线程组成的,一个进程至少有一个线程。由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。
Python的标准库提供了两个模块: _thread 和 threading , _thread 是低级模块,threading是高级模块,对 _thread 进行了封装。绝大多数情况下,我们只需要使用 threading这个高级模块。
启动一个线程就是把一个函数传入并创建Thread实例,然后调用start() 开始执行。
回想一下,我们在你看这篇文章之前是否运行代码都为下面这样,定义两个函数,并且调用他们;
(这里调用time模块只是为了模拟大型程序运行过程的等待时间,可有可无)
- import time
- import _thread
-
- def song(name):
- for i in range(5):
- time.sleep(1)
- print("正在听歌...")
-
- def code(name):
- for i in range(5):
- time.sleep(0.5)
- print("正在编码...")
-
- # 这两个工作肯定是一个执行结束, 另外一个任务才开始执行;
- song(1)
- code(1)
我们看到上面的运行结果,先把song函数调用结束后才运行code的代码,但是这对于高速时代发展的我们来说实在是太慢了,为什么不可以让电脑在同一时间内去充分利用他的cpu;这里需要强调的是电脑运行速度最快的是cpu>内存>硬盘,但是cpu大部分时间是在等待下一个指令,而并非在不停的做着运算,所以为达到这一目的,我们需要用到多线程,让我们的cpu时刻保持高速的运算;
下面我们据一个例子来说明这一点:
_thread模块
- import time
- import _thread
-
- def song(name):
- for i in range(5):
- time.sleep(1)
- print("正在听歌...")
-
- def code(name):
- for i in range(5):
- time.sleep(0.5)
- print("正在编码...")
-
- # # 这两个工作肯定是一个执行结束, 另外一个任务才开始执行;
- # song(1)
- # code(1)
-
- _thread.start_new_thread(song, ('song',))
- _thread.start_new_thread(code, ('code',))
-
- while 1:
- pass
我们能看到运行结果,代码在交替运行,也就是说我们上面的两个函数在cpu运行,而并没有让cpu“休息”,如果你不太愿意相信它是多线程那么可以从运行速度上来进行比较;
threading模块
- import time
- import threading
-
- # 实现多线程的第一种方式:
- def song(name):
- for i in range(5):
- time.sleep(0.1)
- print("正在听歌:%s" %(name))
-
- def code(name):
- for i in range(5):
- time.sleep(0.3)
- print("正在编码:%s" %(name))
-
- # song('hello') # 15s
- # code('hello') # 10s
- t1 = threading.Thread(target=song, args=("sunshine",))
- t2 = threading.Thread(target=code, args=("python",))
- t1.start()
- t2.start()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。