python3 线程、进程
线程、进程
python由于有全局解释锁(GIL)的原因,Python 的线程被限制到同一时刻只允许一个线程执行这样一个执行,所以妨碍了其真正的使用功效,但是对于IO型程序并没有多少影响,后续说解决办法
线程(对于IO密集型程序可以大幅提高程序运行速度,减少执行时间)
python3 目前推荐使用threading
import timestart = time.time()def look_thread(name):for i in range(5):time.sleep(0.5)print('主程序{}运行'.format(name))look_thread('1') look_thread('2') end = time.time() print(end-start)
这个是无线程运行后输出的结果以及所花费的时间
主程序1运行 主程序1运行 主程序1运行 主程序1运行 主程序1运行 主程序2运行 主程序2运行 主程序2运行 主程序2运行 主程序2运行 5.005494832992554
接下来看看使用线程后的程序
import threading import time from threading import Threadstart = time.time() def look_thread(name):for i in range(5):time.sleep(0.5)# print('主程序{}运行'.format(name))print("线程{}正在运行".format(name))t1 = Thread(target=look_thread,args=('1',)) #创建线程1 t2 = Thread(target=look_thread,args=('2',)) #创建线程2 #t1 = Thread(target=look_thread,args=('1',),daemon=True) #如果不喜欢使用join可以使用保护线程 #t2 = Thread(target=look_thread,args=('2',),daemon=True) #创建线程2 t1.start() #启动线程1 t2.start() #启动线程2 print(threading.active_count()) #现存线程数 t1.join() #将线程1加入到当前线程 t2.join() #将线程2加入到当前线程 print(threading.active_count()) #现存线程数 end = time.time() print(end-start) #运行时间
结果如下
3 线程1正在运行 线程2正在运行 线程1正在运行 线程2正在运行 线程1正在运行 线程2正在运行 线程1正在运行 线程2正在运行 线程1正在运行 线程2正在运行 1 2.504371404647827
2个对比可以看出,明显不是按照持续执行,且线程数的变化和运行时间的减半
进程(建议在cpu密集型程序使用)
python3 使用multiprocessing,使用方法同threading
import time from multiprocessing import Process start = time.time() def look_thread(name):for i in range(5):time.sleep(0.5)# print('主程序{}运行'.format(name))print("进程{}正在运行".format(name)) if __name__ == "__main__":t1 = Process(target=look_thread,args=('1',))t2 = Process(target=look_thread,args=('2',))t1.start()t2.start()t1.join()t2.join()end = time.time()print(end-start)
结果如下
进程1正在运行 进程2正在运行 进程2正在运行进程1正在运行进程1正在运行 进程2正在运行 进程1正在运行进程2正在运行进程2正在运行 进程1正在运行 2.7984180450439453
参考书籍:python3-cookbook
转载于:https://www.cnblogs.com/jay-col/p/11008836.html
python3 线程、进程相关推荐
- python3 线程池 ThreadPoolExecutor 简介
前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...
- python_21_线程+进程+协程
python_线程_进程_协程 什么是线程? -- os能够进行运算调度的最小单位,被包含在进程之中,是一串指令的集合 -- 每个线程都是独立的,可以访问同一进程下所有的资源 什么是进程? -- 每个 ...
- 打开线程 | 进程 | 协程的大门
不知从几何起,可能是大三那年的操作系统考试,也可能是刚经历完的秋招,这些概念总是迷迷糊糊,可能自己回答的和其他人的答复也差不多,并没有什么亮点,通常都会以:「我们换个题」的方式结束,有时候也挺尴尬的. ...
- linux 线程 进程经典文章
进程是程 序在计算机上的一次执行活动.当你运行一个程序,你就启动了一个进程.显然,程序是 死的(静态的),进程是活的(动态的).进程可以分为系统进程和用户进程.凡是用于完成操作系统的各种功能的进程就是 ...
- PHP 会话 线程 进程,接上节我们来了解了解多进程的一些基础进程 / 线程 / 多进程 / 父进程 / 子进程 / 会话 / 控制终端等...
多进程的一些基础 定义 进程/父进程/子进程 进程是资源调度和分配的一个独立单元 进程是由线程组成 即等于 一个进程 = 一个线程. 进程是由另一个进程创建 (系统进程 init进程除外) 所以会出现 ...
- Python的线程/进程间通讯对象分析
2019独角兽企业重金招聘Python工程师标准>>> Python提供了一系列的对象支持线程/进程间的通讯: Lock RLock Condition Semaphone Boun ...
- python结束进程树_【python爬虫】线程进程
关注:程序运行速度---->主要是由cpu(大脑)来决定. 想要提高程序的运行速度----->提高cpu利用率. 提高cpu的利用率由两种途径: 1.让cpu不休息.cpu每时每刻都在处理 ...
- python的线程如何启用和结束_python线程进程
操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入 输出设备组成的复杂系统,每位程序员不可能掌握所有系统实现的细节 ...
- 【多线程】线程与进程、以及线程进程的调度
在了解多线程之前,首先要区分线程和进程的概念与区别,我目前只了解到Java的JVM中与操作系统联系中的线程和进程,在了解线程与进程之前,首先要初步了解电脑中的操作系统的地位和作用. 冯诺依曼体系 计算 ...
- linux和Windows线程进程的区别
1.linux线程进程 linux内核中,进程是用一个task_struct的结构体描述的,也就是进程描述符,里面包含了进程id.进程的地址空间.进程打开的文件信息.挂起的信号.进程的状态等等信息. ...
最新文章
- 你需要学好知识图谱——用AI技术连接世界
- mysql proxy 延迟严重_使用MySQL Proxy解决MySQL主从同步延迟
- 下一代对话系统中的关键技术(下篇)
- 利用python爬虫(part15)--cookie模拟登陆
- LeetCode 822. 翻转卡片游戏(哈希)
- C语言 const 笔记
- 潜谈IT从业人员在传统IT和互联网之间的择业问题(上)-传统乙方形公司
- 学hadoop需要什么基础
- C#cmd执行命令隐藏窗口,并保持程序一直运行
- 鳄梨种植者使用传感器节省种植成本
- H.264学习过程中遇到的英文缩写整理
- Atitit Java内容仓库(Java Content Repository,JCR)的JSR-170 文件存储api标准 目录 1. Java内容仓库	1 2. Java内容仓库	2 2.1.
- 服务器系统survey,LimeSurvey:Linux下实现问卷调查系统
- 一键美化python代码
- 计算机无法登陆提示rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
- 【蓝桥杯题目分析】2014年第五届——第二题:切面条
- 两个地理坐标距离计算
- vscode如何添加本地python解释器、解析器 Interpreter?(Python: Select Interpreter)
- Python生成九宫格图片
- MySQL 使用SQL语句实现 增删改查