文章目录

  • 1. 简单的多进程示例代码
  • 2. 进程、线程异同对比


在Python多任务学习笔记(1)——线程中,我们学习了通过线程来实现多任务,而进程也是实现多任务的一种方式,可以简单地将电脑上运行着的每个应用程序理解为一个进程,如:QQ、微信、360杀毒软件等。

1. 简单的多进程示例代码

下面是一段简单的用Python语言实现的多进程代码,对比Python多任务学习笔记(1)——线程中通过Thread类创建线程对象实现多任务的代码,可以发现二者十分类似,只是将包名由threading换成了multiprocessing,将类名由Thread换成了Process

import multiprocessing
import time


def test1():
    while True:
        print("Inside Function test1......")
        time.sleep(1)


def test2():
    while True:
        print("Inside Function test2......")
        time.sleep(1)


def main():
    process1 = multiprocessing.Process(target=test1)
    process2 = multiprocessing.Process(target=test2)

    process1.start()
    process2.start()


if __name__ == "__main__":
    main()

需要说明的是,上述代码运行起来后,将会产生3个进程:1个主进程、2个子进程。

2. 进程、线程异同对比

  • 进程和线程都是实现多任务的一种方式;
  • 进程先运行起来后才会有线程,线程不能够独立存在(如:一个运行着的音乐播放器程序就是一个进程,下载音乐和播放音乐各是其中一条线程,首先需要音乐播放器程序进程运行才可能下载或播放音乐),线程是受到CPU调度来实际负责程序执行的一条条程序控制流;
  • 进程中的多条线程之间一般共享资源(如存储于内存中的变量等),但由主进程创建的多个子进程一般会复制主进程的资源,且通常进程间的资源(如变量等)相互独立,即使用多进程完成多任务一般资源开销大,而线程则较为轻量级;
  • 多线程之间因为共享资源,虽然资源开销小,但是不利于资源的管理和保护,而多进程恰好相反。

下面以工厂中流水线为例,解释进程和线程:

  • 一个进程可以理解为工厂中的一条流水线;
  • 一条线程可以理解为流水线上的一名工人;
  • 通过多线程实现多任务相当于往一条生产线上增加工人;
  • 通过多进程实现多任务相当于开辟新的流水线。