js打印线程id_浅谈python中的多线程和多进程(二)
原创: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中的多线程和多进程(二)相关推荐
- 获得进程id_浅谈python中的多线程和多进程(二)
原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...
- 浅谈 Python 中的多线程。
本文作者:Rocky0249 公众号:Python空间 00.写在之前 大家好,我是 Rocky0429,今天我来写一下 Python 中的多线程.在正式开始之前,我先用比较通俗的语言给大家介绍几个比 ...
- python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题
CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...
- python中怎么调用函数_浅谈Python中函数的定义及其调用方法
一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...
- python读取json数据格式问题_浅谈Python中的异常和JSON读写数据的实现
异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except .. ...
- python中zip的使用_浅谈Python中的zip()与*zip()函数详解
前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...
- python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题
浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...
- python函数定义及调用-浅谈Python中函数的定义及其调用方法
一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数�C封装独立的功能 2.调用函数�C享受封装的成果 函数的作用:在开 ...
- python sys模块作用_浅谈Python中的模块
模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...
最新文章
- java 获取nodejs端Gson数据案例(请求MongoDB)
- linux设备驱动学习(四)——阻塞与非阻塞I/O
- Ubuntu16.04彻底删除MySQL5.7
- Windows下搭建HTK
- 一文理清散乱的物联网里开发者必须关注的技术!
- Tomcat源码下载地址
- 聪明贝塔(Smart Beta)
- Sql中Output参数用法和分页存储过程
- 如何实现微信小程序API的Promise化
- Ubuntu中Scala下载
- mysql有varchar2吗_char、varchar、varchar2区别
- 简单分账系统的分账流程是什么样的?
- latex语法_【研创基地科研实训】关于举办第27期“LaTeX使用技巧交流分享会” 线上科研实训交流活动的通知...
- Unity3d八 Unity使用的坐标系
- 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)
- 呼叫系统使用webRTC网页软电话到底好不好?
- 安利几个堪称黑科技的电脑软件
- 抖音上爆红的美女动态代码图如何实现?
- org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。 的解决办法
- 友达9.87MW隆科太阳能屋顶完成,还将增21MW