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

标签 python multithreading

我对 Python 中的线程处理还很陌生,有几个初学者问题。

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

  • 我可以做些什么来增加内存容量或以其他方式使 Python 允许更多线程?
  • 使用 threading 模块,您能够在 Python 代码中运行的最大线程数是多少?你有没有采取任何技巧来达到这个数字?
  • 使用 threading 模块时是否还有其他注意事项需要注意?

最佳答案

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

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

关于python - 在 Python 中使用线程时需要注意的注意事项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2938405/

相关文章:

java - CopyOnWriteArrayList 抛出 CurrentModificationException

android - 了解有关 Android Studio 中线程的信息

java - 在ArrayBlockingQueue中,为什么将final成员字段复制到局部final变量中?

android - 在线程android中使用处理程序

JavaScript 生成 : How to pass variable to FLAG in Spawn python script

python - Azure Synapse 开发(代码编写)最佳实践

Python,如何有单独的参数处理和主函数?

python - Flask 自动转义具有不常见扩展名的文件

python - 如何在 Windows 上引用路径? (类似于 shlex.quote)

ruby - 什么时候需要将参数传递给 `Thread.new` ?