1.线程与进程概述
- 进程(Process):
计算机中程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 - 线程(Thread):
程序执行流的最小单元,是进程中的一个实体,系统独立调度和分配的基本单位。 - 线程与进程区别:
进程(子进程、父进程)有不同的代码和数据空间,线程(多个线程)则共享数据空间,每个线程有各自的执行堆栈和程序计数器为其执行上下文。
一个进程可以包括多个线程,而线程不能包含进程。
参考阅读:进程与线程的一个简单解释
2.单线程实践应用
单线程:在执行程序执行时,所走的程序路径按照连续顺序进行,前面的程序处理完,才会继续处理后面的程序
案例:一个学生先用2s说话,接着用3s写字,而后结束任务(Step1—>Step2—>Step3)
# 从time模块导入ctime和sleep方法from time import ctime,sleep# 定义说的方法def talk():print("Start to talk %r" %ctime())sleep(2)# 定义写的方法def write():print("Start to write %r" %ctime())sleep(3)# 判断是否执行代码块# 当前模块被直接运行时,则执行if语句后的代码块# 当前模块是被导入的,则不执行if语句后代码块if __name__ == "__main__":talk() # Step1write() # Step2print("All end %r" %ctime()) # Step3# %r实现帮字符串%ctime()加上单引号,然后再传递给%r
输出结果:Start to talk 'Sat Jun 30 00:15:31 2018'Start to write 'Sat Jun 30 00:15:33 2018'All end 'Sat Jun 30 00:15:36 2018'
3.多线程实践应用
多线程:指从软件or硬件上实现多个线程并发执行的技术
案例:让学生同时进行说和写的操作
# 【1-导入模块&方法】
# 从time模块导入sleep和ctime方法
from time import sleep, ctime
# 导入线程相关的模块threading
import threading
# 【2-定义说和写的方法】
# content代表内容,loop代表循环的次数
def talk(content, loop):
for i in range(loop):
print("Start to talk: %s %s" % (content, ctime()))
sleep(2)
def write(content, loop):
for i in range(loop):
print("Start to write: %s %s" % (content, ctime()))
sleep(2)
# 【3-定义、加载说和写的线程】
# 创建空的线程列表
threads = []
# 定义说的线程,通过线程模块threading调用Thread()方法
# Thread(target,args)方法第1个参数targe取值为talk方法
# 第2个参数args传递talk(content,loop)方法所需的参数
t1 = threading.Thread(target=talk, args=('Hi,Friends !',2))
# 将t1线程加载到threads列表
threads.append(t1)
# 定义写的线程
t2 = threading.Thread(target=write, args=('Life is short, you need Python!',3))
threads.append(t2)
# 【4-执行多线程】
if __name__ == '__main__':
# start()方法开始线程活动
for t in threads:
t.start()
# join()方法:主线程依次调用子线程,该线程结束后才开始执行其后的代码
for t in threads:
t.join()
print("All Thread end ! %s" % ctime())
输出结果:Start to talk: Hi,Friends ! Sat Jun 30 01:23:33 2018Start to write: Life is short, you need Python! Sat Jun 30 01:23:33 2018Start to talk: Hi,Friends ! Sat Jun 30 01:23:35 2018Start to write: Life is short, you need Python! Sat Jun 30 01:23:35 2018Start to write: Life is short, you need Python! Sat Jun 30 01:23:37 2018All Thread end ! Sat Jun 30 01:23:39 2018
4.多进程实践应用
与以上多线程相比,多进程需要替换如下:import threading—->import multiprocessingthreading.Thread—->multiprocessing.Process
# 导入模块、方法
from time import sleep,ctime
import multiprocessing
# 定义两个方法:说和写
def talk(content,loop):
for i in range(loop):
print("Talk: %s %s" %(content,ctime()))
sleep(2)
def write(content,loop):
for i in range(loop):
print("Write: %s %s" %(content,ctime()))
sleep(3)
# 定义两个进程
processes = []
p1 = multiprocessing.Process(target=talk, args=('Hi',2))
processes.append(p1)
p2 = multiprocessing.Process(target=write, args=('Python',2))
processes.append(p2)
# 调用执行多进程
if __name__ == '__main__':
for p in processes:
p.start()
for p in processes:
p.join()
print("All processes is Run %s" %ctime())
输出结果:Talk: Hi Sat Jun 30 02:09:17 2018Write: Python Sat Jun 30 02:09:17 2018Talk: Hi Sat Jun 30 02:09:19 2018Write: Python Sat Jun 30 02:09:20 2018All processes is Run Sat Jun 30 02:09:23 2018
作者:Fighting_001
链接:https://www.jianshu.com/p/d814eefaf343
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
