多线程
1、程序、进程与线程
- 程序:一组指令的有序集合。
- 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
- 线程:进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位。
区别:
- 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
- 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行线路;
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程的资源(如打开文件和信等等),某进程内的线程在其他进程不可见;
2、多线程 Python中使用线程有两种方式:函数或用类来包装线程对象 a.函数式:调用thread模块中start_new_thread()函数来产生新线程,语法:
thread.start_new_thread ( function, args[, kwargs] )
参数:
- function - 线程函数
- args - 传递给线程函数的参数,他必须是个tuple类型。
- kwargs - 可选参数
例子:同时实现没1s打印一次“张三”,每3秒打印一次“喵咪吃东西”,代码如下:
import threading
import time
def name():
while 1:
print ("张三")
time.sleep(1)
def cat():
while 1:
print ("猫咪吃东西")
time.sleep(3)
t1 = threading.Thread(target=name)
t2 = threading.Thread(target=cat)
if __name__ == "__main__":
t1.start()
t2.start()
运行结果: b.类来包装线程对象 例子:同时实现没1s打印一次“张三”,每3秒打印一次“喵咪吃东西”,代码如下:
import threading
import time
class Mythread1(threading.Thread):
def __init__(self, name):
super(Mythread1, self).__init__()
self.name = name
def run(self):
while 1:
print (self.name)
time.sleep(1)
class Mythread2(threading.Thread):
def __init__(self, cat):
super(Mythread2, self).__init__()
self.cat = cat
def run(self):
while 1:
print (self.cat)
time.sleep(3)
t1 = Mythread1("张三")
t2 = Mythread2("猫咪吃东西")
t1.start()
t2.start()
运行结果: 多线程优点:
- 使用线程可以把占据长时间的程序中的任务放到后台去处理。
- 程序的运行速度可能加快
- 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
|