多进程的使用| 学习笔记

简介: 快速学习多进程的使用

开发者学堂课程Python入门 2020年版多进程的使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10470


多进程的使用

内容介绍

一、多进程的使用

二、举例说明

 

一、多进程的使用

1.进程

程序:例如 xxx.py 这是程序,是一个静态的。

进程: 一个程序运行起来后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的。

2.进程的状态

工作中,任务数往往大于cpu的核数,即定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态。

1)就绪态:运行的条件都已经满足,正在等在 cpu 执行。

2)执行态:cpu正在执行其功能。

3)等待态:等待某些条件满足,例如一个程序 sleep 了,此时就处于等待态。

3.创建进程

multiprocessing 模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。

写法跟线程差不多

 

二、举例说明

1.代码:

import multiprocessing

def dance():

for i in range(100):

print(‘正在跳舞’ )

def sing():

for i in range(100):

print('正在唱歌')

#创建了两个进程

p1 . multiprocessing.Process(target=dance)

p2 . multiprocessing.Process(target=sing)

P1.start()

p2.start()

现在启动,在Windows平台会报错,mac不会,有个要求,Windows只能在直接运行时才能使用。

代码:

import multiprocessing

def dance():

for i in range(100):

print(‘正在跳舞’ )

def sing():

for i in range(100):

print('正在唱歌')

if _name_== _main_:

#创建了两个进程

p1 . multiprocessing.Process(target=dance)

p2 . multiprocessing.Process(target=sing)

P1.start()

p2.start()

加上if _name_== _main_:表明直接运行这个文件时,下面的代码才会执行。

运行结果:

正在跳舞

正在跳舞

正在跳舞

......

正在唱歌

正在唱歌

......

连在一起的原因:100次跳舞 cpu 还没来得及切换就结束了

如何解决:加上time.sleep

import multiprocessing,time

def dance():

for i in range(100):

time.sleep(0.5)

print(‘正在跳舞’ )

def sing():

for i in range(100):

time.sleep(0.5)

print('正在唱歌')

if _name_== _main_:

#创建了两个进程

p1 . multiprocessing.Process(target=dance)

p2 . multiprocessing.Process(target=sing)

P1.start()

p2.start()

运行结果:

正在跳舞

正在唱歌

正在跳舞

正在唱歌

......

还有需要注意的,线程里也会出现,是一样的,即有参数的情况,要把参数传上去:

import multiprocessing,time

def dance(n):

for i in range(n):

time.sleep(0.5)

print(‘正在跳舞’ )

def sing(m):

for i in range(m):

time.sleep(0.5)

print('正在唱歌')

if _name_== _main_:

#创建了两个进程

#target 用来表示执行的任务

#args 用来传参,类型是一个元祖

p1 . multiprocessing.Process(target=dance,args=(20,))

p2 . multiprocessing.Process(target=sing,args=(50,))

P1.start()

p2.start()

运行结果:

正在跳舞

正在唱歌

正在跳舞

正在唱歌

......

注意:运行的进程在执行结束前可以在任务管理器的详细信息中看到它的 pid

image.png

打出它的pid,使用os模块

import multiprocessing,time,os

def dance(n):

for i in range(n):

time.sleep(0.5)

print(‘正在跳舞’,pid={}.format(os.getpid()))

def sing(m):

for i in range(m):

time.sleep(0.5)

print('正在唱歌',pid={}.format(os.getpid()))

if _name_== _main_:

Print(‘主进程的pid={}.format(os.getpid9()))

#创建了两个进程

#target 用来表示执行的任务

#args 用来传参,类型是一个元祖

p1 . multiprocessing.Process(target=dance,args=(20,))

p2 . multiprocessing.Process(target=sing,args=(50,))

P1.start()

p2.start()

运行结果:

主进程的pid=5484

正在跳舞,pid=5936

正在唱歌,pid=10128

正在跳舞,pid=5936

正在唱歌,pid=10128

正在跳舞,pid=5936

正在唱歌,pid=10128

正在跳舞,pid=5936

正在唱歌,pid=10128

......

image.png

而且在任务管理器中可以把进程强制结束,主进程关掉,子进程还没打印完就会结束。

2.谷歌浏览器也是多进程运行:

image.png

有十个进程,再开一个百度网站就会多一个进程

image.png

想对比找出百度的 pid 是哪个,但是发现 pid 会变,只能尝试,发现结束5896,百度就会崩溃。主进程结束,就全部都会结束,但是结束一个子进程,不会影响其他进程。

相关文章
|
Kubernetes Ubuntu Cloud Native
深入剖析Kubernetes学习笔记-05 | 白话容器基础(一):从进程说开去
深入剖析Kubernetes学习笔记-05 | 白话容器基础(一):从进程说开去
131 0
|
消息中间件 Shell Linux
计算机操作系统学习笔记(7)——进程通信
计算机操作系统学习笔记(7)——进程通信
91 0
|
6月前
|
Linux 调度
Linux学习笔记十一:进程管理
Linux学习笔记十一:进程管理
|
存储 安全 Linux
Go语言学习笔记-进程和线程
Go语言学习笔记-进程和线程
56 0
Go语言学习笔记-进程和线程
|
Linux
计算机操作系统学习笔记(6)——进程和线程
计算机操作系统学习笔记(6)——进程和线程
76 0
|
存储 算法 程序员
[计算机操作系统(慕课版)]第二章 进程的描述与控制(学习笔记)
[计算机操作系统(慕课版)]第二章 进程的描述与控制(学习笔记)
|
安全 Java
Java复习与学习笔记----进程和线程与同步(下)
Java复习与学习笔记----进程和线程与同步(下)
|
Java 调度
Java复习与学习笔记----进程和线程与同步(上)
Java复习与学习笔记----进程和线程与同步
|
Linux
Linux学习笔记(六) 进程管理
Linux学习笔记(六) 进程管理
89 0
|
安全 算法 调度
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(四)
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁
165 1
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(四)

热门文章

最新文章

相关实验场景

更多