继3.7版本之后Python再次发布了新版本,虽然新版本带来了不少调整,但是其中很大一部分都是对代码底层设计的修改,又或是typing、pickle等不常用的功能,对多数用户而言影响不大,今天我想重点聊一聊那些将对我们的代码编写产生较大影响的新功能。
在体验开始前先说下准备工作,由于Python3.8还没有正式发布,因此通过Anaconda的多版本管理搭建Python3.8新环境的方法是行不通的,我的做法是到官网下载对应的最新版本后单独安装。
为了避免与现有环境冲突,将其更名为Python38(下图),下文中的Python如无特殊说明均为Python3.6, Python38为Python3.8。接下来就正式开始新特性体验。
5.共享内存
进程是系统进行资源分配的独立单位,在以前的python版本中,进程间的数据交互只能通过Queue、Pipes等方式来实现,数据无法直接共享。
在Python 3.8中,multiprocessing模块提供了SharedMemory类,可以在不同的Python进程之间创建共享的内存block。目前支持int、float、str、bytes、bool、None、numpy.ndarray等一部分Python对象。
还是举个例子来进行说明,在下面这段代码中建立了2个进程,在进程1中对列表中的每个元素执行+10操作,进程1结束后执行进程2,输出列表内容。
由于进程之间数据无法共享,因此进程2中输出的列表是没有进行过+10操作的内容:
现在我们对代码进行一下小小的修改,nums不是作为一个普通的list,而是作为一个共享内存对象来创建,代码如下:
由于shared_memory是Python3.8中的新增内容,因此在Python3.6下运行会出错,我们还是用Python3.8来运行这段代码(结果如下)可以看到,进程2中输出的结果与进程1中是一样的,两个进程之间通过shared_memory实现了数据共享。
当然,shared_memory在实际应用中肯定不会如此简单,
-
比如SharedMemory.ShareableList和SharedMemory.SharedMemory的使用本身有很多规则和限制、
-
比如需要考虑数据锁的问题等等,
-
但是共享内存确实为进程间通讯提供了一个新的解决方案,而且据说其通讯效率也是非常之高的。
Python3.8发布的新特性和新功能还有很多,对一些内置模块的改进和优化则更多,想尝鲜的同学可以点击阅读原文,了解Python3.8详情!你对Python3.8新特性怎么看,欢迎吱一声留言!
往期热门:
值得收藏|菜鸟学Python【入门文章大全】
学习群:
小密圈人气很高的两个实战项目
小密圈的趣味实战-微信主题
3个月还没入门Python,看这100名小密圈的同学3周学Python的杰作
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python3.x输出如何不换行11/16
- ♥ 如何使用 sublime 运行 python10/12
- ♥ 如何用python处理数据09/28
- ♥ Python实战:filter()函数中使用None进行过滤10/04
- ♥ 使用 f 的 python 格式字符串08/30
- ♥ 如何在python队列中实现多线程?01/11
内容反馈