原创: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)之外的语句也可能会被执行,这并不是我们所期望的。

(公众号:生信了)

js打印线程id_浅谈python中的多线程和多进程(二)相关推荐

  1. 获得进程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中怎么调用函数_浅谈Python中函数的定义及其调用方法

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

  5. python读取json数据格式问题_浅谈Python中的异常和JSON读写数据的实现

    异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except .. ...

  6. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  7. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题

    浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...

  8. python函数定义及调用-浅谈Python中函数的定义及其调用方法

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

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

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

最新文章

  1. java 获取nodejs端Gson数据案例(请求MongoDB)
  2. linux设备驱动学习(四)——阻塞与非阻塞I/O
  3. Ubuntu16.04彻底删除MySQL5.7
  4. Windows下搭建HTK
  5. 一文理清散乱的物联网里开发者必须关注的技术!
  6. Tomcat源码下载地址
  7. 聪明贝塔(Smart Beta)
  8. Sql中Output参数用法和分页存储过程
  9. 如何实现微信小程序API的Promise化
  10. Ubuntu中Scala下载
  11. mysql有varchar2吗_char、varchar、varchar2区别
  12. 简单分账系统的分账流程是什么样的?
  13. latex语法_【研创基地科研实训】关于举办第27期“LaTeX使用技巧交流分享会” 线上科研实训交流活动的通知...
  14. Unity3d八 Unity使用的坐标系
  15. 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)
  16. 呼叫系统使用webRTC网页软电话到底好不好?
  17. 安利几个堪称黑科技的电脑软件
  18. 抖音上爆红的美女动态代码图如何实现?
  19. org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。 的解决办法
  20. 友达9.87MW隆科太阳能屋顶完成,还将增21MW

热门文章

  1. 【Java】输入三角形的三边长,求三角形的面积
  2. 【Python】列表类型操作函数和方法
  3. mysql connection_id 表锁的应用
  4. web应用自动化测试的演进
  5. 订单状态 css_CSS状态2019
  6. 机器学习训练营_如何不运行学习代码训练营
  7. 西河某人_如何使用增强现实祝某人生日快乐
  8. 机器学习模型导出为PMML的方法
  9. Python实现人脸识别 + 手机推送功能,老板来了你就会收到短信提示
  10. Linux(ubuntu)——FTP服务器