目录

  • 1 多任务
  • 1.1 同时执行多个方法
  • 1.2 多任务的概念
  • 1.3 多任务的执行方式
  • 2 进程
  • 2.1 进程的介绍
  • 2.2 进程的概念
  • 2.3 进程效果图
  • 3 python多进程
  • 3.1 多进程的使用
  • 3.2 代码编写


1 多任务

1.1 同时执行多个方法

利用现学知识能够让两个函数或者方法同时执行吗?
不能,因为之前所写的程序都是单任务的,也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行,要想实现这种操作就需要使用多任务。
多任务的最大好处是充分利用CPU资源,提高程序的执行效率。

1.2 多任务的概念

多任务是指在同一时间内执行多个任务,例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件。如下图:

python 多任务串行调度 python多任务处理_开发语言

1.3 多任务的执行方式

  • 并发
  • 并行

并发:
在一段时间内交替去执行任务。例如:对于单核cpu处理多任务,操作系统轮流让各个软件交替执行,假如:软件1执行0.01秒,切换到软件2,软件2执行0.01秒,再切换到软件3,执行0.01秒……这样反复执行下去。表面上看,每个软件都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像这些软件都在同时执行一样,这里需要注意单核cpu是并发的执行多任务的。

并行:
对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的软件,多个内核是真正的一起执行软件。这里需要注意多核cpu是并行的执行多任务,始终有多个软件一起执行。

2 进程

2.1 进程的介绍

在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。

2.2 进程的概念

一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位,也就是说每启动一个进程,操作系统都会给其分配一定的运行资源(内存资源)保证进程的运行。
比如:现实生活中的公司可以理解成是一个进程,公司提供办公资源(电脑、办公桌椅等),真正干活的是员工,员工可以理解成线程。
注意:一个程序运行后至少有一个进程,一个进程默认有一个线程,进程里面可以创建多个线程,线程是依附在进程里面的,没有进程就没有线程。

2.3 进程效果图

单进程效果图:在hello.py程序运行时默认创建了一个进程,进程主要负责向操作系统索要内存资源,代码则由进程的主线程来执行。

python 多任务串行调度 python多任务处理_多进程_02


多进程效果图:在hello.py中再创建一个进程,运行hello.py时实现多进程完成任务。

python 多任务串行调度 python多任务处理_python_03

3 python多进程

3.1 多进程的使用

在此我们将通过python多进程实现多个方法同时执行。
首先导入进程包:

import multiprocessing

使用Process进程类:

Process([group [, target [, name [, args [, kwargs]]]]])
  1. group:指定进程组,目前只能使用None
  2. target:执行的目标任务名
  3. name:进程名字
  4. args:以元组方式给执行任务传参
  5. kwargs:以字典方式给执行任务传参

Process创建的实例对象的常用方法:

  • start():启动子进程实例(创建子进程)
  • join():等待子进程执行结束
  • terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象的常用属性:

  • name:当前进程的别名,默认为Process-N,N为从1开始递增的整数

3.2 代码编写

了解了Process类的常用方法后,就可以开始写代码了。

import multiprocessing
import time

def homework():
    '''
    写作业方法,每隔0.2秒写一次作业
    '''
    for i in range(5):
        print('doing my homework..')
        time.sleep(0.2)

def singing():
    '''
    唱歌方法,每隔0.2秒唱一次歌
    :return:
    '''
    for i in range(5):
        print('singing my favourite song! ')
        time.sleep(0.2)

if __name__=='__main__':
    #创建写作业进程,参数为进程要执行的方法与进程名
    hw_process=multiprocessing.Process(target=homework,name='homework')
    # 创建唱歌进程
    sing_process=multiprocessing.Process(target=singing,name='singing')
    hw_process.start()#启动写作业子进程
    sing_process.start()#启动唱歌子进程

可以发现,我们做到了一边唱歌一边写作业了,多次执行可以发现,每次的结果可能会不同哦,o( ̄▽ ̄)ブ。

singing my favourite song! 
doing my homework..
doing my homework..singing my favourite song! 

doing my homework..singing my favourite song! 

doing my homework..singing my favourite song! 

singing my favourite song! doing my homework..