原创:hxj7

本文继续分享一个关于python多线程和多进程区别的例子

前文《浅谈python中的多线程和多进程》中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高运算量的任务,从中看出二者的一些区别。其中一点是“多线程会共享所属进程的内存资源;而子进程会从父进程那里拷贝一份内存资源”。当时没有进一步解释,为了更直观地了解这一点,本文给出一个例子。

我们用python分别创建多线程和多进程,然后打印出其中的变量和函数的id。这里的id是指python中对象的唯一标识符,可以通过id(obj)函数获得。如果两个对象的值相等,它们不一定是同一个对象,即它们的id不一定相等;反过来说,如果“两个”对象的id一样,那么它们其实是同一回事,就是同一个对象,它们的值一定相等。

我们首先用python创建多线程并打印其中对象的id。代码如下:

from threading import Thread
import time# all subthreads share data.
def run_subthread(thread_id):time.sleep(thread_id + 1)print("inside run_subthread: a = %d, id(a) = %d, id(run_subthread) = %d" % (a, id(a), id(run_subthread)))a = 10
print("outside run_subthread: a = %d, id(a) = %d, id(run_subthread) = %d" % (a, id(a), id(run_subthread)))if __name__ == "__main__":threads = [Thread(target=run_subthread, args=(idx, )) for idx in range(2)]for t in threads:t.start()for t in threads:t.join()print "all done"

运行结果如下:

从中可以看出,不同线程中的对象id是一样的,也就是说多线程共享了同一份对象资源。

然后我们用python创建多进程并打印其中对象的id。代码如下:

from multiprocessing import Process
import time# each subprocess has its own copy of data.
def run_subproc(proc_id):time.sleep(proc_id + 1)print("inside run_subproc: a = %d, d(a) = %d, id(run_subproc) = %d" % (a, id(a), id(run_subproc)))a = 10
print("outside run_subproc: a = %d, id(a) = %d, id(run_subproc) = %d" % (a, id(a), id(run_subproc)))if __name__ == "__main__":proc = [Process(target=run_subproc, args=(idx, )) for idx in range(2)]for p in proc:p.start()for p in proc:p.join()print "all done"

运行结果如下:

从中可以看出,不同子进程中的对象id是不一样的(变量和函数的id都不一样),说明多进程中,每个子进程都拷贝了父进程的一份对象资源。

除此之外,我们还可以看到,与多线程不同的是,多进程中的每个子进程都还执行了print("outside run_subproc: a = %d, id(a) = %d, id(run_subproc) = %d" % (a, id(a), id(run_subproc)))这一句。关于这一点的机制笔者并不完全清楚,不过它提醒我们,如果我们用python的多进程,要注意一些目标函数(target)之外的语句也可能会被执行,这并不是我们所期望的。

(公众号:生信了)

获得进程id_浅谈python中的多线程和多进程(二)相关推荐

  1. js打印线程id_浅谈python中的多线程和多进程(二)

    原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...

  2. 浅谈 Python 中的多线程。

    本文作者:Rocky0249 公众号:Python空间 00.写在之前 大家好,我是 Rocky0429,今天我来写一下 Python 中的多线程.在正式开始之前,我先用比较通俗的语言给大家介绍几个比 ...

  3. python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题

    CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...

  4. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  5. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  6. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

  7. python的re2和re区别_浅谈Python中re.match()和re.search()的使用及区别

    1.re.match()fvk免费资源网 re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.fvk免费资源网 包含的参数如下: ...

  8. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  9. python中怎么调用函数_浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...

最新文章

  1. Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
  2. Nginx的虚拟主机配置
  3. bzoj4665: 小w的喜糖
  4. ESD二极管,替代国际品牌型号汇总
  5. 2018年第九届省赛C/C++A组第4题——第几个幸运数
  6. Android 取得 ListView中每一个Item项目的值
  7. 什么是 SAP Spartacus UI 的 code deprecation
  8. Java对象引用四个级别(强、软、弱、虚)
  9. Hbase Memstore刷新方式与Region的数目上限
  10. 大学生php实训心得1500_通知 | 关于举办全国第五届暨河南省第一届大学生国际学术研讨会通知...
  11. Science杂志公布的机器学习资源
  12. DongTai--被动型IAST工具部署体验
  13. matlab2015使用dsolve错误,matlab - 当变量乘以常数时,dsolve中的错误(R2011a) - 堆栈内存溢出...
  14. 用python实现矩形图片转换正方形(防失真 + 文件批量可操作)
  15. 16光8电全千兆宽温工业交换机16千兆光8千兆网口机架式网管型工业级以太网交换机
  16. 五大浏览器的简单介绍
  17. SD,TF,SD卡檢測腳
  18. html页面放大缩小样式不变,网页缩小放大后错位的解决方法
  19. java 同步数据,同步数据到另一个库中。
  20. 为什么“高大上”的算法工程师变成了数据民工?

热门文章

  1. hdu 2188巴什博弈
  2. HDOJ 2066 HDU 2066 一个人的旅行 ACM 2066 IN HDU
  3. 第四章:react ajax
  4. 基于jQuery实现自动或点击切换效果
  5. 纯css3制作的几个社交媒体网站的图标
  6. edit with idle 没反应_搬个家,猫咪不吃不喝甚至猝死?可能是你没做好“前戏”...
  7. function好的写法
  8. 计算机网络 ospf重点,计算机网络:OSPF协议概述
  9. java商品列表展示_springMVC入门程序。使用springmvc实现商品列表的展示。
  10. linux的chmod,chown命令 详解