python 并发编程 多线程与多进程的区别
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 并发编程 多线程与多进程的区别的更多相关文章
- python 并发编程 多线程 目录
线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多 ...
- python并发编程&多线程(一)
本篇理论居多,实际操作见: python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...
- python并发编程&多线程(二)
前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...
- 第十章:Python高级编程-多线程、多进程和线程池编程
第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...
- Python并发编程一(多进程)
1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...
- Python并发编程系列之多进程(multiprocessing)
1 引言 本篇博文主要对Python中并发编程中的多进程相关内容展开详细介绍,Python进程主要在multiprocessing模块中,本博文以multiprocessing种Process类为中心 ...
- Python并发编程——多线程与协程
Pythpn并发编程--多线程与协程 目录 Pythpn并发编程--多线程与协程 1. 进程与线程 1.1 概念上 1.2 多进程与多线程--同时执行多个任务 2. 并发和并行 3. Python多线 ...
- python并发编程——多线程
编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程 1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...
- python并发编程中的多进程(代码实现)
一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...
随机推荐
- Django + pyecharts 实现数据可视化
1 创建django项目 :Visualization and APP :Demo >>django-admin startproject Visualization >>p ...
- k8s配置文件模板
一,deployment Deployment为Pod和Replica Set下一代Replication Controller)提供声明式更新 1,配置示例 apiVersion: apps/v1 ...
- QT Creator有中文出现“常量中有换行符 ”的解决办法
QT Creator有中文出现“常量中有换行符 ”的解决办法 QT Creator在QT5.9下报错“常量中有换行符 ”,我的代码中有中文,而且在Windows 10下用微软VS编译器编译.造成这个报 ...
- scrapy项目5:爬取ajax形式加载的数据,并用ImagePipeline保存图片
1.目标分析: 我们想要获取的数据为如下图: 1).每本书的名称 2).每本书的价格 3).每本书的简介 2.网页分析: 网站url:http://e.dangdang.com/list-WY1-dd ...
- linux环境下C++写TCP通信(一)
#include<stdio.h> #include<string.h> //tcp #include<unistd.h> #include<sys/type ...
- Spring Boot教程(二十八)通过JdbcTemplate编写数据访问
数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <depende ...
- TC-SRM391-div2-SortingGame(BFS,STL)
Problem Statement for SortingGame Problem Statement In The Sorting Game, you are given a sequence co ...
- win7系统安装Mysql5.7
1.下载mysql的zip包 把zip包解压到指定的目录,目录不能有中文和空格 2.进入%mysql%目录(注:%mysql%是解压目录,我的是:D:\JavaTool\mysql) 在%mysql% ...
- 【Spark机器学习速成宝典】模型篇03线性回归【LR】(Python版)
目录 线性回归原理 线性回归代码(Spark Python) 线性回归原理 详见博文:http://www.cnblogs.com/itmorn/p/7873083.html 返回目录 线性回归代码( ...
- kkfileview v2.0 发布,文件在线预览项目方案
kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...