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

在Python中使用线程时要注意的注意事项?,python,multithreading,Python,Multithreading,我对Python中的线程非常陌生,有几个初学者问题 当使用Pythonthreading模块启动超过50个线程时,我开始得到MemoryError。线程本身非常纤细,并且不太需要内存,因此似乎是线程的开销导致了内存问题 我可以做些什么来增加内存容量,或者让Python允许更多的线程 使用threading模块在Python代码中可以运行的最大线程数是多少?你有没有耍什么花招来达到这个数字 使用线程处理模块时,是否有其他注意事项 您的问题不能用一般方式回答,因为线程的良好使用始终取决于要解决的具

我对Python中的线程非常陌生,有几个初学者问题

当使用Python
threading
模块启动超过50个线程时,我开始得到
MemoryError
。线程本身非常纤细,并且不太需要内存,因此似乎是线程的开销导致了内存问题

  • 我可以做些什么来增加内存容量,或者让Python允许更多的线程
  • 使用
    threading
    模块在Python代码中可以运行的最大线程数是多少?你有没有耍什么花招来达到这个数字
  • 使用
    线程处理模块时,是否有其他注意事项

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

      • 你为什么需要这么多踏板?无论如何,您的计算机可能无法并行运行它们
      • 看看无堆栈Python。我不知道这个项目的现状,但我认为它是为解决这类问题而设计的
      • 全局解释器锁阻止纯Python代码真正并行运行。但是C方法可以并行运行,所以在现实生活中,有时很难猜测Python在并行化方面的表现
      • Python有许多很好的库。看看其中是否有一个已经为您的设计问题提供了解决方案。如果您的问题与网络有关,请查看Twisted
      -线程设计用于低内存消耗。 通用调用可以很容易地用于生成新线程。

      已知对标准CPython的性能限制有很大影响。因此,注意到:

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


      GIL可能不是导致内存错误的原因,但它是需要注意的。

      计算机有多少内存?通常,您需要尽可能少的线程。听起来你觉得你想要尽可能多的。THC4k:你从哪里得到这个印象的?所需的线程数量显然是问题域的一个函数。还可以看看gevent,它是为修复Eventlet的一些bug而构建的,具有更好的性能。