Python中的多线程是假的多线程?

为什么这么说,我们先明确一个概念,全局解释器锁(GIL)global interpreter lock

Python代码的执行由Python虚拟机(解释器)来控制,同时只有一个线程在执行

对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同时只有一个线程在运行。

在多线程环境中,Python虚拟机按照以下方式执行。 1.设置GIL。 2.切换到一个线程去执行。 3.运行。 4.把线程设置为睡眠状态。 5.解锁GIL。 6.再次重复以上步骤。

比方我有一个4核的CPU,那么这样一来,在单位时间内每个核只能跑一个线程,然后时间片轮转切换。但是Python不一样,它不管你有几个核,单位时间多个核只能跑一个线程,然后时间片轮转。执行一段时间后让出,多线程在Python中只能交替执,100核只能用到1个核例如,下面的代码4核cpu只会用一个核,大概占用25%的cpu使用率。

from threading import Thread
​
def loop():
​while True:
​print("亲爱的,我错了,我能吃饭了吗?")
​
if __name__ == '__main__':
​for i in range(3):t = Thread(target=loop)t.start()

而如果我们变成进程呢?cpu --100%

from multiprocessing import Process
​
def loop():while True:print("亲爱的,我错了,我能吃饭了吗?")
​
if __name__ == '__main__':for i in range(3):t = Process(target=loop)t.start()
​

多线程怎么使用多核: 1、重写python编译器(官方cpython)如使用:PyPy解释器 2、调用C语言的链接库

Python中的多线程是假的多线程?相关推荐

  1. Python中的多线程是假的多线程

    Python多线程相当于单核多线程,多线程有两个好处:CPU并行,IO并行,单核多线程相当于自断一臂.所以,在Python中,可以使用多线程,但不要指望能有效利用多核.如果一定要通过多线程利用多核,那 ...

  2. c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程

    全局解释器锁(GIL)只允许1个Python线程控制Python解释器.这也就意味着同一时间点只能有1个Python线程运行.如果你的Python程序只有一个线程,那么全局解释器锁可能对你的影响不大, ...

  3. python列表生成式原理_三元表达式/和/或如何在Python中工作/真与假的性质/列表生成/生成器,and,or,执行,原理,True,False,本质,生成式...

    一看标题,看似是三个不相关的问题,实际上息息相关. 我们都知道,"C系语言(C\C++.C#.Java等)"都有一个共同的知识点:三目运算符,其主要作用还是为了简化选择结构语句.让 ...

  4. Tensorflow yolov3 Intel Realsense D435 双摄像头下测试python多线程(假的多线程)self.predict()函数运行时间(191204)

    测试代码: # -*- coding: utf-8 -*- """ @File : test-191204-两个摄像头调用多线程识别.py @Time : 2019/12 ...

  5. python中run函数作用_python3多线程中如何改写run()函数?

    我们对于函数的使用一般是直接根据其作用进行举例讲解,最近偶然的一次多线程的代码练习中,让小编发现在构建多线程的时候,我们也可以对函数进行重写.小编马上进行了这个函数内容的整理,为了让大家能理解前后的内 ...

  6. python中的socketserver模块与多线程

    早就听说socketsever特别厉害,可以简化客户端和服务端的实现,尤其是在多线程socket通话的情境下,可以说是一个比较高级的模块 python下的socket编程我们已经学过了,而今天,我们来 ...

  7. python中多线程是真的还是假的_Python中的鸡肋多线程

    在介绍Python中的线程之前,先明确一个问题,Python中的多线程是假的多线程! 为什么这么说,我们先明确一个概念,全局解释器锁(GIL). Python代码的执行由Python虚拟机(解释器)来 ...

  8. python廖雪峰_【Python】python中实现多进程与多线程

    进程与线程 进程(process)就是任务,是计算机系统进行资源分配和调度的基本单位[1].比如,打开一个word文件就是启动了一个word进程. 线程(thread)是进程内的子任务.比如word中 ...

  9. async python两个_【Python】python中实现多进程与多线程

    进程与线程 进程(process)就是任务,是计算机系统进行资源分配和调度的基本单位[1].比如,打开一个word文件就是启动了一个word进程. 线程(thread)是进程内的子任务.比如word中 ...

最新文章

  1. 免费GPU哪家强?谷歌Kaggle vs. Colab
  2. 数学知识-- 信赖域(Trust Region)算法是怎么一回事
  3. [luogu5004]专心OI - 跳房子【矩阵加速+动态规划】
  4. js中window.location.search的用法和作用
  5. DCMTK:DcmElement :: calcElementLength的测试程序
  6. JNDI数据源的配置
  7. 模拟产品展示 Flash无法展示的追踪过程
  8. object类型replace掉$、转换成float、运算
  9. [Ext JS] 3.3 树(Tree)的定义和使用
  10. Redis主从自动failover
  11. 国内搜索大哥iOS面试题
  12. Atitit.异常机制的设计原理
  13. 安装2000服务器显示文件挂起,MS sql server 2000安装中的提示挂起的解决方案。
  14. python爬虫菜鸟驿站_爬30层楼、扛40斤……5万菜鸟驿站春节快递不打烊
  15. 九月亲测可运营【付费视频奖励计划赞助视频付费计划】最新版本的视频奖励源代码带有订阅可扣除金额带有代理新UI ...
  16. 【Java】面向对象(二)继承
  17. android+后台自动更新+上架,Android增量自动更新
  18. 启动(程序还没执行生成dump文件的代码)就崩溃的处理流程
  19. python数据模型和算法_万字案例 | 用Python建立客户流失预测模型(含源数据+代码)...
  20. 获取特定时间的时间戳,以及在使用时ios不生效问题

热门文章

  1. python分苹果问题_蓝桥杯--算法提高--VIP--分苹果题目(差分数组)
  2. 尤菲·如月 与你有约 ぐりぐりキュートユフィ汉化补丁
  3. S2JH 自动审计@Audited 的问题
  4. 【VBA】日期时间函数总结(全)
  5. nodeJS打包安装和问题处理
  6. 解决laytpl.js模板引擎插件加载模板后无法获取模板中的元素id等内容
  7. 开发一款系统软件大概需要多少钱呢
  8. MySQL数据表添加新字段
  9. Hi3519V101移植SDL+FreeType+SDL_ttf
  10. 嘀嗒APP打车体验记