首页
学习
活动
专区
圈层
工具
发布

分析GIL
EN

Stack Overflow用户
提问于 2017-02-21 21:38:14
回答 2查看 1.4K关注 0票数 4

有没有一种方法可以对python进程使用GIL进行分析?基本上,我想知道在GIL举行的时间中所占的百分比。这个过程是单线程的.

我的动机是有一些用Cython编写的代码,它使用nogil。理想情况下,我希望在多线程进程中运行它,但是为了知道这是否可能是一个好主意,我需要知道GIL是否有相当长的时间是免费的。

我在8年前找到了这个相关的问题。唯一的答案是“不”。希望从那以后情况发生了变化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-15 19:04:13

完全是偶然的,我找到了一个工具,就是这样做的:加载

它实际上是在我贴出问题后发表的。

“干得好,”克里斯宾顿说。

代码语言:javascript
复制
>>> import sys, math
>>> import gil_load
>>> gil_load.init()
>>> gil_load.start(output = sys.stdout)
>>> for x in range(1, 1000000000):
...     y = math.log(x**math.pi)
[2017-03-15 08:52:26]  GIL load: 0.98 (0.98, 0.98, 0.98)
[2017-03-15 08:52:32]  GIL load: 0.99 (0.99, 0.99, 0.99)
[2017-03-15 08:52:37]  GIL load: 0.99 (0.99, 0.99, 0.99)
[2017-03-15 08:52:43]  GIL load: 0.99 (0.99, 0.99, 0.99)
[2017-03-15 08:52:48]  GIL load: 1.00 (1.00, 1.00, 1.00)
[2017-03-15 08:52:52]  GIL load: 1.00 (1.00, 1.00, 1.00)
<...>

>>> import sys, math
>>> import gil_load
>>> gil_load.init()
>>> gil_load.start(output = sys.stdout)
>>> for x in range(1, 1000000000):
...     with open('/dev/null', 'a') as f:
...         print(math.log(x**math.pi), file=f)

[2017-03-15 08:53:59]  GIL load: 0.76 (0.76, 0.76, 0.76)
[2017-03-15 08:54:03]  GIL load: 0.77 (0.77, 0.77, 0.77)
[2017-03-15 08:54:09]  GIL load: 0.78 (0.78, 0.78, 0.78)
[2017-03-15 08:54:13]  GIL load: 0.80 (0.80, 0.80, 0.80)
[2017-03-15 08:54:19]  GIL load: 0.81 (0.81, 0.81, 0.81)
[2017-03-15 08:54:23]  GIL load: 0.81 (0.81, 0.81, 0.81)
[2017-03-15 08:54:28]  GIL load: 0.81 (0.81, 0.81, 0.81)
[2017-03-15 08:54:33]  GIL load: 0.80 (0.80, 0.80, 0.80)
<...>
票数 7
EN

Stack Overflow用户

发布于 2017-02-21 22:24:40

我不知道有这样的工具。

但是有一些启发式方法可以帮助您猜测多线程是否会有所帮助。正如您可能知道的那样,GIL将在IO操作和一些对本机代码的调用中释放,尤其是由第三方本地模块调用。如果您没有那么多这样的代码,那么多线程可能不会对您有所帮助。

如果您有IO/本机代码,那么您可能需要尝试一下。根据代码库的不同,将整个代码转换为利用多个线程可能需要很多工作,因此您可能需要尝试将多线程应用于您知道IO/本机代码正在被调用的部分,并度量是否有任何改进。

根据您的用例,多处理可能适用于主要受CPU约束的情况。多处理确实增加了开销,因此对于持续时间相对较长(几秒或更长)的CPU绑定任务来说,这通常是一种很好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42378491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档