当前位置: 首页 > wzjs >正文

服装网站栏目上海建设项目环保验收公示网站

服装网站栏目,上海建设项目环保验收公示网站,万网如何建网站,企业培训考试系统分类目录:《系统学习Python》总目录 在讨论线程以及如何避免GIL的过程中,Python贡献者Michele Simionato发布了一个示例,可以看作演示并发的“Hello World”示例,即能展示Python“一心二用”最简单的程序。Simionato的程序使用的是…

分类目录:《系统学习Python》总目录


在讨论线程以及如何避免GIL的过程中,Python贡献者Michele Simionato发布了一个示例,可以看作演示并发的“Hello World”示例,即能展示Python“一心二用”最简单的程序。Simionato的程序使用的是multiprocessing,经过我们修改,又分别实现了使用threadingasyncio的版本。

multiprocessing包支持在单独的Python进程而非线程中运行并发任务。创建multiprocessing.Process实例后,一个全新的Python解释器以子进程的形式在后台启动。由于每个Python进程都有自己的GIL,因此程序可以使用所有可用的CPU核,但最终还是取决于操作系统的调度程序。后续的文章我们会讲具体影响,对这个简单的程序来说没什么实质差别。本文的目的是介绍multiprocessing包,展示它的API与threading的API的对应关系,方便我们把使用线程的简单程序改用进程实现。我们还是以相同的示例来讲解:启动一个函数,阻塞3秒,期间在终端展示字符动画,让用户知道程序正在运转,没有停滞。这个脚本在界面上的相同位置依次显示字符串\|/-中的各个字符,实现旋转指针动画。当缓慢的计算结束后,旋转指针那一行内容清空,显示结果:Answer: 42。下面的代码是进程multiprocessing版本:

import itertools
import time
from multiprocessing import Process, Event  # multiprocessingAPI基本模仿threading API,不过类型提示和Mypy还是揭示了一处区别:multiprocessing.Event是函数(threading.Event是类)​,返回synchronize.Event实例,因此还需要导入multiprocessing.synchronize才能编写类型提示
from multiprocessing import synchronizedef spin(msg: str, done: synchronize.Event) -> None:  # 与threading版本一致for char in itertools.cycle(r'\|/-'):status = f'\r{char} {msg}'print(status, end='', flush=True)if done.wait(.1):breakblanks = ' ' * len(status)print(f'\r{blanks}\r', end='')def slow() -> int:  # 与threading版本一致time.sleep(3)return 42def supervisor() -> int:done = Event()spinner = Process(target=spin, args=('thinking!', done))  # Process类的基本用法与Thread相似。print(f'spinner object: {spinner}')  # spinner.parent是创建Process对象的进程的进程ID。spinner.start()result = slow()done.set()spinner.join()return resultdef main() -> None:result = supervisor()print(f'Answer: {result}')if __name__ == '__main__':main()

threadingmultiprocessing的API基本相同,但是实现方式差别很大,而且为了处理多进程编程增加的复杂度,multiprocessing的API更多。例如,把线程换成进程后,一个难点是如何在被操作系统隔离且无法共享Python对象的进程之间通信。为此,跨进程传递的对象需要序列化和反序列化,这样一来开销就增加了。在上述示例中,跨进程传递的数据只有Event状态。在multiprocessing模块底层的C代码中,Event状态通过操作系统底层信号量实现。

从Python 3.8开始,标准库提供了multiprocessing.shared_memory包,但是不支持用户定义类的实例。除了原始字节,这个包还允许进程共享一个ShareableList。这是一个可变序列类型,存放固定数量的项,项的类型可以是intfloatboolNone,以及单项不超过10MB的strbytes

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.
[2] 卢西亚诺·拉马略.流畅的Python 第2版(全2册) 编程语言[M].人民邮电出版社,2023.

http://www.dtcms.com/wzjs/781922.html

相关文章:

  • 好的建筑设计网站推荐企业展厅设计专业品牌
  • 泉州网站建设技术外包如何申请免费网站空间
  • 三合一网站建设报价爱墙 网站怎么做
  • 南县网站设计科技公司网页图片
  • 手机做网站用什么广州我网站制作
  • 呼市网站制作pc端网页设计公司
  • 网站做适配手机要多久海外网三农频道
  • 建立免费公司网站嘉兴新闻头条最新消息
  • 个人网站开发意义wordpress怎么关闭ssh
  • 自助式建网站关于公司网站建设方案收集
  • 用dw做的代码怎么放在网站上wordpress刷新ssl就没了
  • 专业做网站哪家强做阿里国际网站多少钱
  • 写作网站六大神书网站建设ppt方案模板
  • 大良建站公司行业现状手机上如何做微电影网站
  • 大兴网站建设价格给中小企业提供网站建设服务
  • 烟台专门做网站的做微信网站公司
  • 深圳租赁住房和建设局网站软件项目管理的内容
  • 烟台seo网站排名优化网络营销运营推广方案下载
  • 福田网站建设方案网站制作公司数据库管理排名
  • flash cms网站源码哪个网站发布招聘信息免费
  • 拖拽式建站平台网站短信验证怎么做的
  • 建一个门户网站多少钱为什么要做营销型的网站建设
  • 网站建设公司哪家好 皆来磐石网络盘锦企业网站建设
  • 制作一个企业网站过程网站会员充值接口怎么做的
  • 网站建设外包 源代码施工企业发电机加油怎么做账
  • 洛阳制作网站的公司哪家好wordpress+4.2.1
  • 网上提供免费主页空间的网站网络工程师培训学校
  • 公司网站作用面包店网站建设论文
  • 徐州做网站哪家好wordpress菜单新连接
  • 网站建设中排名掉了什么是 网站收录