我正在评估Python在新项目中的使用并运行了一些基础教程,但我正在为Python中的多线程开发寻找一些建议和资源?它与其他语言相比如何?
答案 0 :(得分:3)
我建议http://herbsutter.wordpress.com/(向下滚动到高效的并发列),以便对多处理的全部内容进行非常精彩的概述。是的,那个人谈论C ++上下文中的并发性,但大多数都适用于任何语言。
如果你提到并发和Python,很多人可能会大喊“全局解释器锁定”,并说Python不能真正做到并发。那是过去的废话。 Multiprocess模块允许正确使用多个内核,其好处是可以轻松地将多种任务分配到多台计算机和内核上。
多处理模块是相当新的,结果是Python在进行并发时仍有很多未开发的潜力。但最重要的是,Python拥有所有适当的工具,从多处理及其消息传递和共享内存到green threads
答案 1 :(得分:1)
可以肯定的是,你提到多线程而不是多处理。关于Multithreading的信息 可以在该链接上找到。多线程在功能上与多处理不同。正如其他答案中所提到的,我建议使用Multiprocessing,因为它可以很好地利用多个处理器。我在一些项目中成功使用了多处理模块。
答案 2 :(得分:0)
multiprocessing模块很棒,可以摆脱GIL的限制。
当然,您也可以使用线程等来使用基于C的模块。
答案 3 :(得分:0)
这里有2个很好的python线程教程,包含代码示例和一些很好的背景信息:
http://linuxgazette.net/107/pai.html
http://www.ibm.com/developerworks/aix/library/au-threadingpython/
答案 4 :(得分:0)
要在python中进行多线程处理,可以使用python内置的threading模块。但是,请注意,如果您的线程是计算绑定而不是IO绑定,则在多线程时,您可能会有更差性能。如果您的执行线程确实受计算限制,请查看multiprocessing模块或stackless。
答案 5 :(得分:0)
虽然关于multiprocessing
的评论是一个非常有用的新软件包,可以轻松利用多核系统,但您对多线程行为的要求可能不需要,也可能完全不受“ GIL“。
我们已经构建了许多应用程序,它们都是多线程的,用于各种类型的机器控制(或“仪器”,如果你愿意的话)。 GIL对我们来说完全不是问题,也许是因为我们通常不受CPU限制,尽管在我们这几个领域它也从来都不是问题因为我们利用的外部软件包在需要时释放GIL。 (关于GIL的负面评论的强度总是让我感到惊讶,可能是因为我们在某些非典型的领域和方式工作。)
Python的线程支持非常有效,非常易于使用,并且非常强大。我们不得不关注较低级别的并发问题(在某些语言中,您必须花费一半的时间来考虑锁定什么以及何时锁定它),但是在我们仍然需要的少数领域中,这种情况不仅罕见要注意它可用的支持使它变得相对容易。
一个关键的事情是利用Queue类,因为在可能的情况下使用它通常会消除对关键部分,竞争条件等的任何遗留问题.Python的原始对象(整数,字母,列表等)都是尽可能地保证线程安全,但如果您是线程应用程序的新手,它们将无法保护您免受自己的无知。对于这方面经验丰富的程序员,我认为Python非常有效且易于使用。