前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发篇-python并发通信

并发篇-python并发通信

作者头像
小团子
发布2019-07-18 10:58:34
1.1K0
发布2019-07-18 10:58:34
举报
文章被收录于专栏:数据云团数据云团

使用多线程实现并发服务器与使用多进程实现并发服务器

python支持的并发分为多线程并发和多进程并发还有异步IO。

多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作系统管理,不足之处在于程序与各进程之间的通信和数据共享不方便;

多线程并发则由程序员管理并发处理的任务,这种并发方式可以方便地在线程间共享数据(前提是不能互斥)。

对于计算密集型程序,多进程并发优于多线程并发。

计算密集型程序指的程序的运行时间大部分消耗在CPU的运算处理过程,而硬盘和内存的读写消耗的时间很短;

相对地,IO密集型程序指的则是程序的运行时间大部分消耗在硬盘和内存的读写上,CPU的运算时间很短。

对于多进程并发,python支持两种实现方式

一种是采用进程安全的数据结构:multiprocessing.JoinableQueue,这种数据结构自己管理“加锁”的过程,程序员无需担心“死锁”的问题;

python还提供了一种更为优雅而高级的实现方式:采用进程池。

独立的进程内存空间与共享的服务器进程空间

>>>互不干扰的独立内存空间

# 定义一个全局变量

>>>yuntuan = 1

# 声明全局

>>>global yuntuan

# 修改全局变量的值

>>>a = 2

# 等待子进程结束

>>>p.join()

不能修改变量,深层次问题是,这个进程与那个进程完全失去了联系。

进程间通信的解决方案

看到辣么多的箭头,是不是感觉头晕呀~

1. 管理器负责与公共进程通信

2. 代理负责操作共享的空间

Manger对象的基本使用

# 创建一个服务器进程,并返回与其通信的管理器

>>>mgr = Manager()

# 在服务器进程中开辟一个列表空间,并在主进程中返回一个代理

>>>list_proxy = mgr.list()

# 初始的时候是一个空列表

>>>print(list_proxy)

# 当子进程执行完以后就不是了

>>>print("云团输出:", list_proxy)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档