Python并发编程怎样选择多线程多进程多协程
admin
2023-07-13 18:41:40
0

在并发编程的时候,多线程和多进程是经常会被使用的两种模式(此外还有协程等) 。由于 CPython 的 GIL 限制(Jython 和 IronPython 没有 GIL,PyPy 在尝试去掉 GIL),只有获取了 GIL 的线程才能使用 CPU,所以除了需要处理一些可能会阻塞的 IO(读写文件、访问网络等)之外,基本没人会去使用 CPython 的多线程 。因此,本文就来说说更有用的 Python 多进程编程 。

Python并发编程怎样选择多线程多进程多协程

文章插图
注:推荐学习:Python视频教程)
本文描述的环境为 Linux 操作系统(也适用于大部分 POSIX 系统)下的 CPython,可能不适用于 Windows操作系统或其他的Python 实现 。
为了避免歧义,下文用「主进程」或「当前进程」表示创建子进程的那个进程,而不使用「父进程」,除非明确指明了「xx 的父进程」 。
与多线程编程时需要传递一个 callable 对象不同的是,多进程编程的时候,是将主进程复制到子进程,并不能直接要求子进程执行某个 callable 对象 。
在 POSIX 系统中,这个复制操作是由 clone() 和 fork() 系统调用来完成的,一般主要使用后者 。
如果 fork() 执行成功的话,会分别在主进程和子进程中返回子进程的 PID 和 0,然后执行代码就开始不同了 。如果失败的话(内存不够、PID 达到上限等),子进程就不会创建,主进程会返回 -1,errno 会被设置为对应的错误码 。
在 CPython 的实现中,os.fork() 主要是对 fork() 函数的封装,差别在于失败时抛出 OSError,该异常的 errno 属性是对应的错误码 。
因此,多进程的 Python 代码大致会长成这样:
import ostry: pid = os.fork() if pid == 0: # 子进程 # 子进程的代码 else: # 主进程 # 主进程的代码except OSError: # 主进程处理 fork 失败的代码【Python并发编程怎样选择多线程多进程多协程】更多Python相关技术文章,请访问Python教程栏目进行学习!

相关内容

热门资讯

C... 本文目录导航: Creo怎样导出CAD工程图 creo怎样导出cad工程图...
在... 本文目录导航: 在国外creo多少钱一套 creo正版一套可以几团体用 ...
是... 本文目录导航: “PAD”是什么意思? alias自学出成果吗 ...
帮... 本文目录导航: 帮助翻译100字左右的英语小短文 脚本是什么 ...
l... 本文目录导航: linux下的aliases有什么作用? linux 程序...
a... 本文目录导航: alias和alias name的区别是什么? 别名”用英...
科... 本文目录导航: 科幻电影里的特效是什么软件制造的? 什么软件做3维的动画好...
请... 本文目录导航: 【探讨】请问icem和alias那个用得更广,更好使??? ...
C... 本文目录导航: Creo哪个版本好用些呢? creo怎么扫描? ...
c... 本文目录导航: creo parametric 怎样读的 creo par...
C... 本文目录导航: 【最新版本】Creo11.0具体装置教程【附装置包】 PT...
c... 本文目录导航: creo怎样把三维图转cad? Creo怎样导出CAD工程...
C... 本文目录导航: Creo新建工程图把三维模型导出二维图纸的关系操作 cre...
中... 本文目录导航: 在PTC Creo 中机械整机组装成功后,因须要发给客户,为了技术隐秘,公...
P... 本文目录导航: PROE/CREO三维模型导出二维工程图教程 creo怎样...
C... 本文目录导航: Creo新建工程图把三维模型导出二维图纸的关系操作 cre...
C... 本文目录导航: Creo工程图导出CAD文件设置 CREO2.0 如何把模...
阿... 本文目录导航: 阿加莎·克里斯蒂侦探推理波洛系列内容简介 阿加莎克里斯蒂侦...
a... 本文目录导航: anti-aliasing是什么意思? aliasing混...
哪... 本文目录导航: 哪种狗体积最小,最好养? 古希腊神的名字 ...