作者回复: 这里要涉及操作系统的一些知识,一个Python进程运行之后,会申请自己运行所需要的内存,内存又按照功能分成很多部分,其中的“栈”会存放基本数据类型。那么一个进程中进行变量赋值是需要“栈”这个功能来完成的。 那当你使用了多进程之后,就会产生另一个进程,也就是会申请另一组“栈”。那么两个进程用了两个不同的“栈”,所以无法使用赋值的方式传递变量,而两个进程又可能会有互相通信的需要,所以在设计进程的时候,会再设计进程之间的通信方式,其中管道就是最常用的通信方式之一了。
作者回复: 是的,感谢,忘记在文字下方提醒大家。
作者回复: 你好,第一个问题,和你怀疑的cpu压力大小和进程数量多少是有一定关系的,基于硬件配置高,没有创建多进程是有可能出现的 2 queue.put(os.getpid()) 之后如果没有报错或没有取出数据之前队列中的数据是不会消失的,建议你这样做: 执行了queue.put(os.getpid()) 之后,增加一个观察队列的代码 ,queue.qsize() 这行代码可以返回队列的大小(队列里元素的数量) 另外在执行过程中,观察一下运行的终端是否有错误产生。
作者回复: 从执行结果来看,串行和并行不是一个数量级的速度。所以我猜测你的串行计算程序一定是执行了多次。为什么多次执行相同的程序会变“快”?相信你看到这里心里就有了对正确答案的猜测。没错,这里的串行程序并没有计算,而是由于Python解释器在内存中缓存了短时间多次执行程序的结果。 那么由此,你可能会衍生出另外一个问题:既然能缓存了,跑在生成环境中的代码也可以,那么是不是并行计算无法比串行计算更有优势? 这里一定要清楚,我们跑的测试代码,是两次执行过程的中间结果和最终结果都没有变化,且代码简单才能进行的缓存。一旦进行复杂的常见,中间过程和结果不同,计算过程也就无法缓存了,必然并行和串行都要当做第一次运行来对待。这也经常是我们听到很多编译型语言在吐槽python运行的慢的原因了。 关于python执行代码缓存相关问题,可以参考下面这个链接,得到更详细的解释: https://www.jianshu.com/p/eb100c7bb4cf
编辑回复: 棒!
作者回复: 你的Python应该是python2.x版本,需要将它换成Python3版本,要从官方网站重新下载。