在Python中使用线程时需要注意的注意事项?

时间:2010-05-30 11:29:14

标签: python multithreading

我对Python中的线程很陌生,并且有一些初学者的问题。

当使用Python threading模块启动超过50个线程时,我开始获得MemoryError。线程本身非常纤薄,并且内存不足,所以看起来线程的开销会导致内存问题。

  • 我能做些什么来增加内存容量或者让Python允许更多的线程吗?
  • 使用threading模块在​​Python代码中运行的最大线程数是多少?你有没有做过这个号码的技巧?
  • 使用threading模块时是否还有其他注意事项?

3 个答案:

答案 0 :(得分:3)

您的问题无法以一般方式回答,因为线程的良好使用总是取决于要解决的具体问题。你也没告诉我们你正在使用哪个Python版本,所以我假设你使用“默认”CPython而不是IronPython或类似的东西。给你一些提示和想法,以进一步思考你的问题:

  • 你为什么需要这么多踏板?无论如何,您的机器可能无法并行运行它们。
  • 看看Stackless Python。不知道项目的当前状态,但我认为它是针对这类问题而设计的。
  • 全局解释器锁可以防止纯Python代码真正并行运行。但是C方法可以并行运行,所以在现实生活中,有时很难猜测Python在并行化方面的表现。
  • Python有很多好的库。看看其中一个是否已经有解决您的设计问题的方法。如果您的问题与网络有关,请查看Twisted,例如。

答案 1 :(得分:1)

Eventlets - 线程设计用于低内存消耗。 通用调用spawn可以很容易地用于生成新线程。

答案 2 :(得分:1)

已知Global Interpreter Lock对标准CPython的性能限制有很大影响。因此multiprocessing module注意到:

  

多处理是一个包   使用。支持生成进程   API类似于线程模块。   多处理包提供   本地和远程并发,   有效地踩踏全球   解释器使用子进程锁定   而不是线程。因此,   多处理模块允许   程序员充分利用多个   给定机器上的处理器。它运行   在Unix和Windows上。

GIL可能不是您的MemoryErrors的原因,但需要注意的是。