我一直试图弄清楚Python中线程是如何工作的,但很难找到有关线程如何工作的好信息。我可能只是遗漏了一个链接或其他东西,但似乎官方文档在这个主题上并不是很透彻,我也找不到一篇好的文章。
据我所知,一次只能运行一个线程,活动线程大约每10条指令切换一次?
哪里有一个好的解释,或者你能提供一个吗?了解在Python中使用线程时遇到的常见问题也是非常好的。
发布于 2008-08-27 23:53:00
下面是一个基本的线程示例。它将产生20个线程;每个线程将输出其线程数。运行它并观察它们的打印顺序。
import threading
class Foo (threading.Thread):
def __init__(self,x):
self.__x = x
threading.Thread.__init__(self)
def run (self):
print str(self.__x)
for x in xrange(20):
Foo(x).start()
正如您所暗示的,Python线程是通过时间切片实现的。这就是他们如何获得“平行”效果的。
在我的示例中,我的Foo类扩展了线程,然后我实现了run
方法,这是您希望在线程中运行的代码所在的位置。要启动线程,您可以在thread对象上调用start()
,这将自动调用run
方法...
当然,这只是最基本的。您最终会希望了解用于线程同步和消息传递的信号量、互斥锁和锁。
发布于 2008-08-28 02:34:19
如果单个工作线程正在执行I/O绑定操作,请使用python中的线程。如果您试图在一台机器上跨多个内核进行扩展,要么为python找到一个好的IPC框架,要么选择一种不同的语言。
发布于 2014-02-07 00:19:03
GIL的一个简单解决方案是multiprocessing模块。它可以用作线程模块的替代,但使用多个解释器进程而不是线程。正因为如此,对于简单的事情,它比普通的线程有更多的开销,但如果你需要的话,它会给你带来真正的并行化的优势。它还可以轻松扩展到多台物理机。
如果你需要真正大规模的并行化,我会看得更远,但如果你只想扩展到一台计算机的所有核心或几个不同的核心,而没有实现更全面的框架所需的所有工作,那么这对你来说是合适的。
https://stackoverflow.com/questions/31340
复制相似问题