并发编程 下

 我来答
大沈他次苹0B
2022-07-07 · TA获得超过7267个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:170万
展开全部

进程是计算机中资源分配的最小单元;一个进程中可以有多个线程,同一个进程中的线程共享资源;

进程与进程之间则是相互隔离。

Python中通过多进程可以利用CPU的多核优势,计算密集型操作适用于多进程。

关于在Python中基于multiprocessiong模块操作的进程:

fork ,【“拷贝”几乎所有资源】【支持文件对象/线程锁等传参】【unix】【任意位置开始】【快】

spawn ,【run参数传必备资源】【不支持文件对象/线程锁等传参】【unix、win】【main代码块开始】【慢】

forkserver ,【run参数传必备资源】【不支持文件对象/线程锁等传参】【部分unix】【main代码块开始】

官方文档:https://docs.python.org/3/library/multiprocessing.html

示例1

示例2

案例:

进程的常见方法:

进程是资源分配的最小单元,每个进程中都维护自己独立的数据,不共享。

如果想要让他们之间进行共享,则可以借助一些特殊的东西来实现。

Shared memory

Data can be stored in a shared memory map using Value or Array . For example, the following code【 数据可以使用Value或Array存储在共享内存映射中。 例如下面的代码 】

Server process

A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.

【 manager()返回的管理器对象控制一个服务器进程,该进程保存Python对象,并允许其他进程使用代理操作这些对象。 】

multiprocessing supports two types of communication channel between processes

【 支持两种进程之间的通信通道 】

Queues

The Queue class is a near clone of queue.Queue . For example

Pipes

The Pipe() function returns a pair of connection objects connected by a pipe which by default is duplex (two-way). For example:

函数返回一对由管道连接的连接对象,该管道默认为双工(双向)。 例如:

上述都是Python内部提供的进程之间数据共享和交换的机制,作为了解即可,在项目开发中很少使用,后期项目中一般会借助第三方的来做资源的共享,例如:MySQL、redis等。

如果多个进程抢占式去做某些操作时候,为了防止操作出问题,可以通过进程锁来避免。

很显然,多进程在操作时就会出问题,此时就需要锁来介入:

注意:如果在进程池中要使用进程锁,则需要基于Manager中的Lock和RLock来实现。

暂时以了解为主。

计算机中提供了:线程、进程 用于实现并发编程(真实存在)。

协程(Coroutine),是程序员通过代码搞出来的一个东西(非真实存在)。

协程也可以被称为微线程,是一种用户态内的上下文切换技术。

简而言之,其实就是通过一个线程实现代码块相互切换执行(来回跳着执行)。

例如:

上述代码是普通的函数定义和执行,按流程分别执行两个函数中的代码,并先后会输出: 1、2、3、4 。

但如果介入协程技术那么就可以实现函数见代码切换执行,最终输入: 1、3、2、4 。

在Python中有多种方式可以实现协程,例如:

虽然上述两种都实现了协程,但这种编写代码的方式没啥意义。

这种来回切换执行,可能反倒让程序的执行速度更慢了(相比较于串行)。

协程如何才能更有意义呢?

通过上述内容发现,在处理IO请求时,协程通过一个线程就可以实现并发的操作。

现在很多Python中的框架都在支持协程,比如:FastAPI、Tornado、Sanic、Django 3、aiohttp等,企业开发使用的也越来越多(目前不是特别多)。



已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式