1.线程与进程概述

  • 进程(Process):
    计算机中程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
  • 线程(Thread):
    程序执行流的最小单元,是进程中的一个实体,系统独立调度和分配的基本单位。
  • 线程与进程区别:
    进程(子进程、父进程)有不同的代码和数据空间,线程(多个线程)则共享数据空间,每个线程有各自的执行堆栈和程序计数器为其执行上下文。
    一个进程可以包括多个线程,而线程不能包含进程。

参考阅读:进程与线程的一个简单解释

2.单线程实践应用

单线程:在执行程序执行时,所走的程序路径按照连续顺序进行,前面的程序处理完,才会继续处理后面的程序

案例:一个学生先用2s说话,接着用3s写字,而后结束任务(Step1—>Step2—>Step3)

  1. # 从time模块导入ctime和sleep方法
  2. from time import ctime,sleep
  3. # 定义说的方法
  4. def talk():
  5. print("Start to talk %r" %ctime())
  6. sleep(2)
  7. # 定义写的方法
  8. def write():
  9. print("Start to write %r" %ctime())
  10. sleep(3)
  11. # 判断是否执行代码块
  12. # 当前模块被直接运行时,则执行if语句后的代码块
  13. # 当前模块是被导入的,则不执行if语句后代码块
  14. if __name__ == "__main__":
  15. talk() # Step1
  16. write() # Step2
  17. print("All end %r" %ctime()) # Step3
  18. # %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 2018
Start to write: Life is short, you need Python! Sat Jun 30 01:23:33 2018
Start to talk: Hi,Friends ! Sat Jun 30 01:23:35 2018
Start to write: Life is short, you need Python! Sat Jun 30 01:23:35 2018
Start to write: Life is short, you need Python! Sat Jun 30 01:23:37 2018
All Thread end ! Sat Jun 30 01:23:39 2018

4.多进程实践应用

与以上多线程相比,多进程需要替换如下:
import threading—->import multiprocessing
threading.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 2018
Write: Python Sat Jun 30 02:09:17 2018
Talk: Hi Sat Jun 30 02:09:19 2018
Write: Python Sat Jun 30 02:09:20 2018
All processes is Run Sat Jun 30 02:09:23 2018

作者:Fighting_001
链接:https://www.jianshu.com/p/d814eefaf343
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。