马云|多进程间的全局变量共享吗?一道问题引出了16+面试题,你都会吗

文章图片
前言最近多线程与高并发的知识点真的是相当的火呀 , 这不 , 刚刚家里的小祖宗(比我小一辈的孩子 , 但是岁数没差多少)在面试的时候就碰壁了 , 不过幸好的是他作为应届生 , 应该拿offer问题不大 , 让他碰壁的就一个问题:多进程间的全局变量共享吗?
其实是很简单的一个话题 , 不过 , 这小伙子可能当时紧张了 , 就没回答出来多少内容 , 最后抱歉的跟面试官其他的忘记了
哈哈哈哈 , 话不多说 , 直接看代码吧 , 这种直观的展现是我比较喜欢的
import multiprocessing as mul_p
import time
egg1 = 1
def write(egg2 q):
global egg1
print(\"write全局变量彩蛋[%s
...\" % egg1)
print(\"write彩蛋[%s
...\" % egg2)
egg1 -= 1
print(\"write全局变量彩蛋[%s
...原来的彩蛋[1
\" % egg1)
# 将修改后的彩蛋1的值放入队列中去
q.put(egg1)
def read(egg2 q):
global egg1
print(\"read全局变量彩蛋[%s
...\" % egg1)
print(\"read彩蛋[%s
...\" % egg2)
while True:
# 从队列中取出 p1 子进程中的 全局变量彩蛋1 的值
egg1 = q.get()
print(\"read接收到的write中的全局变量彩蛋[1
的值:%d\" % egg1)
if q.empty():
print(\"接收完毕...\")
break
def main():
# 假设连个进程都需要打印下面这个彩蛋2
egg2 = 2
# ① 创建一个队列可以不填队列就可以很大 , 但有个极限 , 我们不去考虑它
#如果填了数字为 x, 则这个队列可以存储 x 个数据
q = mul_p.Queue()
# ② 创建两个进程对象
p1 = mul_p.Process(target=write args=(egg2 q))
p2 = mul_p.Process(target=read args=(egg2 q))
# ③ 让两个子进程开始工作
p1.start()
# 先让主进程 休息1s 让 p1 子进程先执行完 , 不然两个子进程 争着执行 打印输出会乱套
time.sleep(1)
p2.start()
if __name__ == \"__main__\":
main()
运行结果:write全局变量彩蛋[1
...
write彩蛋[2
...
write全局变量彩蛋[0
...原来的彩蛋[1
read全局变量彩蛋[1
...
read彩蛋[2
...
read接收到的write中的全局变量彩蛋[1
的值:0
接收完毕...
怎么样 , 这样来看 , 是不是就很好理解了 , 这也是为什么我之前的文章都会说一句 , 要多写代码的原因 , 写的多了 , 里面有一些知识点自然而然的就学会了 , 当然了 , 闷头敲代码肯定也是不行的 , 也要注意总结 , 来吧 , 总结
二、总结
- ① 各个进程间全局变量的值是 不共享
的 ※:这是因为每创建一个进程就会 copy 一份原始代码(全局变量还是初值)给自己使用 , 所以进程间的代码是一样的 , 但 变量和数据是独立 的
- ② 各个进程间可以通过 Queue 创建的队列来传递变量 , 列表 , 字符串值(包括全局变量的值)
- ③ 每个进程任务里的参数 , 除了 全局变量(函数局部变量) , 其余的参数都需要通过外部实参 , 传入到内部形参 。 ※:尤其是上例程的 队列 q 要作为 实参传给两个进程 , 这样才能实现两个进程间的通信 。
- ③ 进程与线程之间的关系与区别:① 进程 包含 多个线程② 进程间 不共用 变量与资源;线程间 共用 变量与资源③ 使用 time.sleep() 可以停下当前的进程 , 让其他进程开始工作
内容包括:
主要是通过一些面试题讲解一些知识点 , 我个人觉得 , 带着目的的去学习是一件挺刺激的事情 , 遇见问题解决问题 , 要的就是解决问题的成就感 , 希望能对大家有所帮助
【马云|多进程间的全局变量共享吗?一道问题引出了16+面试题,你都会吗】最后:东西在我手里是我自己的 , 东西你不自己去整理也还都是我的 , 希望大家有需要的 , 可以关注+转发后 , 私信“资料”查看获取方式 , 然后把这张图转成自己的东西
推荐阅读
- 健康广东|8月18日广东疫情最新通报:广州深圳新增多少病例
- 被指“双标”特斯拉无奈服软 拼多多是最后赢家吗?
- 里卡多·高拉特|高拉特秒变全能战士!华夏幸福有他会赢球了,泰达要玩死阿奇姆彭
- 科学探索|揭秘星际物种起源:多个行星孵化器组成“生命之树”
- 多所在京大学录取线来了 各校设置多条投档线
- 绿色可循环包装好处多,为啥收快递时却遇不到?
- | 万多福开心果开心补给站亮相上海外滩BFC创意集市
- 星车记|新能源车上市这么久,为啥很多人不喜欢?买过的车主说出实话
- 推荐|北京丰台一处自来水井发生“井喷”,多方联动,不到一小时修好
- |甘肃临夏副州长率“助农天团”走进直播间,60万拼多多网友围观
