首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中线程是如何工作的?常见的Python线程特有的陷阱是什么?

在Python中线程是如何工作的?常见的Python线程特有的陷阱是什么?
EN

Stack Overflow用户
提问于 2008-08-27 23:44:48
回答 4查看 43.2K关注 0票数 88

我一直试图弄清楚Python中线程是如何工作的,但很难找到有关线程如何工作的好信息。我可能只是遗漏了一个链接或其他东西,但似乎官方文档在这个主题上并不是很透彻,我也找不到一篇好的文章。

据我所知,一次只能运行一个线程,活动线程大约每10条指令切换一次?

哪里有一个好的解释,或者你能提供一个吗?了解在Python中使用线程时遇到的常见问题也是非常好的。

EN

回答 4

Stack Overflow用户

发布于 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方法...

当然,这只是最基本的。您最终会希望了解用于线程同步和消息传递的信号量、互斥锁和锁。

票数 21
EN

Stack Overflow用户

发布于 2008-08-28 02:34:19

如果单个工作线程正在执行I/O绑定操作,请使用python中的线程。如果您试图在一台机器上跨多个内核进行扩展,要么为python找到一个好的IPC框架,要么选择一种不同的语言。

票数 10
EN

Stack Overflow用户

发布于 2014-02-07 00:19:03

GIL的一个简单解决方案是multiprocessing模块。它可以用作线程模块的替代,但使用多个解释器进程而不是线程。正因为如此,对于简单的事情,它比普通的线程有更多的开销,但如果你需要的话,它会给你带来真正的并行化的优势。它还可以轻松扩展到多台物理机。

如果你需要真正大规模的并行化,我会看得更远,但如果你只想扩展到一台计算机的所有核心或几个不同的核心,而没有实现更全面的框架所需的所有工作,那么这对你来说是合适的。

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

https://stackoverflow.com/questions/31340

复制
相关文章

相似问题

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