1.开进程的开销远大于开线程

2 同一进程内的线程共享该进程的数据,进程之间地址空间是隔离的

1 开进程的开销远大于开线程
from multiprocessing import Process

def work():
print('hello') if __name__ == '__main__':
#在主进程下开启子进程
p = Process(target=work)
p.start()
print('主进程') '''
主进程
hello
'''

执行结果如下,p.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程

先打印的是主进程

 
from threading import Thread

def work():
print('hello') if __name__ == '__main__':
t = Thread(target=work)
t.start()
print('主线程') '''
hello
主线程
'''

执行结果如下,几乎是t.start ()的同时就将线程开启了,然后先打印出了hello,开线程不用申请内存空间,证明线程的创建开销极小

2 同一进程内的线程共享该进程的数据?

1、进程之间地址空间是隔离的

from multiprocessing import Process

def work():
global n
n = 0 if __name__ == '__main__':
n = 100
p = Process(target=work)
p.start()
p.join()
print('主', n) '''
主 100
'''

执行结果如下,毫无疑问子进程p已经将自己的全局的n改成了0,但改的仅仅是它自己的,查看父进程的n仍然为100,
子进程不影响主进程 2、同一进程内开启的多个线程是共享该进程地址空间的
# 2 同一进程内的多个线程共享该进程的地址空间

from threading import Thread

def work():
global n
n = 0 if __name__ == '__main__':
n = 100
t = Thread(target=work)
t.start()
t.join()
print('主',n) '''
主 0
'''

执行结果如下, 查看结果为0, 因为同一进程内的线程之间共享进程内的数据

 
三 pid
1.开多个进程,每个进程都有不同的pid
current_process 可以查看pid
# 3 pid

from multiprocessing import Process
from multiprocessing import current_process # current_process 可以查看pid def work(name):
print("%s" %name,current_process().pid) # 当前子进程id if __name__ == '__main__': p = Process(target=work, args=("子进程",))
p.start()
print('主', current_process().pid) # 主进程id '''
主 5880
子进程 5092
'''

os模块查看pid
from multiprocessing import Process
import os def work():
print("子进程:%s , 父进程:%s" %(os.getpid(), os.getppid())) # 子进程pid if __name__ == '__main__': p = Process(target=work)
p.start()
print('主', os.getpid()) # 主进程pid '''
主 15420
子进程:17024 , 父进程:15420
'''

2.在主进程下开启多个线程,每个子线程都跟主进程的pid一样

他们同属一个进程

# 3 pid

from threading import Thread
import os def work():
print("子线程PID:%s" %(os.getpid())) # 子线程pid if __name__ == '__main__': t = Thread(target=work)
t.start()
print('主', os.getpid()) # 主线程pid '''
子线程PID:4328
主 4328
'''
 

 

 

python 并发编程 多线程与多进程的区别的更多相关文章

  1. python 并发编程 多线程 目录

    线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多 ...

  2. python并发编程&多线程(一)

    本篇理论居多,实际操作见:  python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...

  3. python并发编程&多线程(二)

    前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...

  4. 第十章:Python高级编程-多线程、多进程和线程池编程

    第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...

  5. Python并发编程一(多进程)

    1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...

  6. Python并发编程系列之多进程(multiprocessing)

    1 引言 本篇博文主要对Python中并发编程中的多进程相关内容展开详细介绍,Python进程主要在multiprocessing模块中,本博文以multiprocessing种Process类为中心 ...

  7. Python并发编程——多线程与协程

    Pythpn并发编程--多线程与协程 目录 Pythpn并发编程--多线程与协程 1. 进程与线程 1.1 概念上 1.2 多进程与多线程--同时执行多个任务 2. 并发和并行 3. Python多线 ...

  8. python并发编程——多线程

    编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程   1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...

  9. python并发编程中的多进程(代码实现)

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...

随机推荐

  1. Django + pyecharts 实现数据可视化

    1 创建django项目 :Visualization and  APP :Demo >>django-admin startproject Visualization >>p ...

  2. k8s配置文件模板

    一,deployment Deployment为Pod和Replica Set下一代Replication Controller)提供声明式更新 1,配置示例 apiVersion: apps/v1 ...

  3. QT Creator有中文出现“常量中有换行符 ”的解决办法

    QT Creator有中文出现“常量中有换行符 ”的解决办法 QT Creator在QT5.9下报错“常量中有换行符 ”,我的代码中有中文,而且在Windows 10下用微软VS编译器编译.造成这个报 ...

  4. scrapy项目5:爬取ajax形式加载的数据,并用ImagePipeline保存图片

    1.目标分析: 我们想要获取的数据为如下图: 1).每本书的名称 2).每本书的价格 3).每本书的简介 2.网页分析: 网站url:http://e.dangdang.com/list-WY1-dd ...

  5. linux环境下C++写TCP通信(一)

    #include<stdio.h> #include<string.h> //tcp #include<unistd.h> #include<sys/type ...

  6. Spring Boot教程(二十八)通过JdbcTemplate编写数据访问

    数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <depende ...

  7. TC-SRM391-div2-SortingGame(BFS,STL)

    Problem Statement for SortingGame Problem Statement In The Sorting Game, you are given a sequence co ...

  8. win7系统安装Mysql5.7

    1.下载mysql的zip包 把zip包解压到指定的目录,目录不能有中文和空格 2.进入%mysql%目录(注:%mysql%是解压目录,我的是:D:\JavaTool\mysql) 在%mysql% ...

  9. 【Spark机器学习速成宝典】模型篇03线性回归【LR】(Python版)

    目录 线性回归原理 线性回归代码(Spark Python) 线性回归原理 详见博文:http://www.cnblogs.com/itmorn/p/7873083.html 返回目录 线性回归代码( ...

  10. kkfileview v2.0 发布,文件在线预览项目方案

    kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...