作者 | 万里羊 责编 | 王晓曼 出品 | CSDN博客
线程和进程 计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行。 如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间开工时其它车间不能工作,也就是一个CPU一次只能执行一个任务。 进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。 当然一个车间还有很多工人,他们互相协同完成一个工作;而线程就好比工厂的工人,一个进程可以包含多个线程。 线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
多线程与多进程 通俗易懂的理解就是:
多进程:允许多个任务同时进行
多线程:允许单个任务分成不同的部分运行
Python多线程的实现 Python3 通过两个标准库 thread(python2中是thread模块)和 threading 提供对线程的支持。 thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。
threading:
import threading #导入threading库import timedef run(n):
print("task", n)
time.sleep(1) #延时一秒
print('2s')
time.sleep(1)
print('1s')
time.sleep(1)
print('0s')
time.sleep(1)if __name__ == '__main__':
t1 = threading.Thread(target=run, args=("t1",))#创建线程1,取名为t1
t2 = threading.Thread(target=run, args=("t2",))#创建线程2,取名为t2
t1.start() #开启线程t1
t2.start() #开启线程t2
输出结果:
task t1
task t22s2s1s1s0s0s
可以看出先开启了线程t1,在开启t2然后每隔一秒打印数据。
自定义线程 通过继承threading.Thread来自定义线程类,其本质是重构Thread类中的run方法:
import threadingimport timeclass MyThread(threading.Thread):def __init__(self, n):
super(MyThread, self).__init__() # 重构run函数必须要写
self.n = ndef run(self):
print("task", self.n)
time.sleep(1)
print('2s')
time.sleep(1)