存档

文章标签 ‘gil’

[转载]python 线程,GIL 和 ctypes

2012年3月21日 没有评论

1 GIL 与 Python 线程的纠葛
GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题,
运行下面这段 python 程序,CPU 占用率会到多少:

# 请勿在工作中模仿,危险:)
def dead_loop():
while True:
pass

dead_loop()

阅读全文…

分类: Python 标签: ,

python GIL 相关

2012年3月20日 没有评论

对于纯python代码,即使开启多个线程也无法并行执行,因为GIL会将它们串行化,但这并不意味着多线程在python中无用武之地:
一个I/O密集型的线程因等待而sleep时,会释放GIL,另一个线程这时可以接手(因为在输入输出函数会更多地调用内建的C级代码,而不是Python级代码)
可以在C扩展中开启多个线程,不受GIL的限制,比如ctypes
对于多用户的程序或者需要responsive interface的GUI程序,多线程是一个很好的解决方案

参考文档:
1.http://septem.iteye.com/blog/1002509

分类: Python 标签: ,

翻译How does multi-threading work with Ice for Python?

2012年3月20日 没有评论

Python supports multi-threaded programming, but the interpreter is inherently single threaded: a global interpreter lock (GIL) allows only one thread at a time to execute a Python opcode. Despite this limitation, careful management of the GIL can still provide performance improvements; for example, a thread that is about to block on I/O can release the GIL so a different thread can use the CPU in the meantime. Although the GIL is an implementation detail that is typically of interest only to developers of Python extensions, it is still important for Python programmers to understand the semantics of the GIL and how it affects their applications.

Python程序是支持多线程的,但是它的解释器本质上确是单线程的。因为GIL(全局解释器锁)在执行Python代码的时候一次只允许开启一个线程。虽然有这个限制,但是在GIL控制方面,还有可以提升性能的。比如,一个线程在I/O阻塞的时候释放GIL,让另一个线程去使用CPU。一般GIL的实现细节应该是Python扩展开发人员应该关心的。但是它对于我们理解GIL的原因和它对我们项目的影响同样重要。

分类: Python 标签: , ,