导航:首页 > 编程语言 > python线程全局锁

python线程全局锁

发布时间:2022-12-06 04:56:41

A. python为什么要有全局锁

多进程和多线程 需要锁,不然会造成输出结果错乱。比如:同时print("hello world!"),会造成这样的结果:hehello worldllo world,会同时打印在一起。锁是避免出现这种情况。

B. Python中级精华-并发之启动和停止线程

为了让代码能够并发执行,向创建线程并在核实的时候销毁它。

由于目的比较单纯,只是讲解基础的线程创建方法,所以可以直接使用threading库中的Thread类来实例化一个线程对象。

例子,用户输入两个数字,并且求其两个数字的四则运算的结果:

除了以上的一些功能以外,在python线程

中没有其他的诸如给线程发信号、设置线程调度属性、执行任何其他高级操作的功能了,如果需要这些功能,就需要手工编写了。

另外,需要注意的是,由于GIL(全局解释器锁)的存在,限制了在python解释器当中只允许运行一个线程。基于这个原因,不停该使用python线程来处理计算密集型的任务,因为在这种任务重我们希望在多个CPU核心上实现并行处理。Python线程更适合于IO处理以及设计阻塞操作的并发执行任务(即等待IO响应或等待数据库取出结果等)。

如何判断线程是否已经启动?

目的:我们加载了一个线程,但是想要知道这个线程什么时候才会开始运行?

方法:

线程的核心特征我认为就是不确定性,因为其什么时候开始运行,什么时候被打断,什么时候恢复执行,这不是程序员能够控制的,而是有系统调度

来完成的。如果遇到像某个线程的运行依托于其他某个线程运行到某个状态时该线程才能开始运行,那么这就是线程同步

问题,同样这个问题非常棘手。要解决这类问题我们要借助threading中的Event对象。

Event其实和条件标记类似,匀速线程

等待某个时间发生。初始状态时事件被设置成0。如果事件没有被设置而线程正在等待该事件,那么线程就会被阻塞,直到事件被设置位置,当有线程设置了这个事件之后,那么就会唤醒正在等待事件的线程,如果线程等待的事件已经设置了,那么线程会继续执行。

一个例子:

如上能够确定的是,主线程会在线程t运行结束时再运行。

C. 为什么有人说 Python 的多线程是鸡肋

因为 Python 中臭名昭着的 GIL。

那么 GIL 是什么?为什么会有 GIL?多线程真的是鸡肋吗? GIL 可以去掉吗?带着这些问题,我们一起往下看,同时需要你有一点点耐心。

多线程是不是鸡肋,我们先做个实验,实验非常简单,就是将数字 “1亿” 递减,减到 0 程序就终止,这个任务如果我们使用单线程来执行,完成时间会是多少?使用多线程又会是多少?show me the code

那么把 GIL 去掉可行吗?

还真有人这么干多,但是结果令人失望,在1999年Greg Stein 和Mark Hammond 两位哥们就创建了一个去掉 GIL 的 Python 分支,在所有可变数据结构上把 GIL 替换为更为细粒度的锁。然而,做过了基准测试之后,去掉GIL的 Python 在单线程条件下执行效率将近慢了2倍。

Python之父表示:基于以上的考虑,去掉GIL没有太大的价值而不必花太多精力。

阅读全文

与python线程全局锁相关的资料

热点内容
mysqllinux登录命令 浏览:438
qq相册双层加密 浏览:552
编程c语言输入n个平均值 浏览:9
本地电脑怎么把文件上传到服务器 浏览:775
windows98密码怎么加密 浏览:396
网页编程时如何打开网页 浏览:404
文明6怎么登入2k服务器 浏览:585
linux发行版命令 浏览:434
湘潭国企程序员招聘 浏览:26
目送pdf 浏览:361
pdf如何只读文件 浏览:479
2019基金从业教材pdf 浏览:966
mvc的编程思想 浏览:712
北京机架式服务器云空间 浏览:555
电脑装了svn服务器是什么 浏览:409
多媒体压缩和编码 浏览:880
php仿百度搜索 浏览:364
单片机做混响 浏览:103
下雨了程序员笑话 浏览:491
程序员交通卡哪家好 浏览:817