作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的情况是我正在下载大量文件。现在一切都在一个主 Python 线程上运行,并且每隔几分钟下载多达 3000 个文件。问题是这样做的时间太长了。我意识到 Python 没有真正的多线程,但是有更好的方法吗?我正在考虑启动多个线程,因为 I/O 绑定(bind)操作不应该需要访问全局解释器锁,但也许我误解了这个概念。
最佳答案
多线程非常适合用于加速网络上的 I/O 的特定目的(尽管异步编程会提供更高的性能)。 CPython 的多线程非常“真实”( native 操作系统线程)——您可能想到的是 GIL,它是阻止不同线程同时运行 Python 代码的全局解释器锁。但是所有 I/O 原语在等待系统调用完成时放弃 GIL,因此 GIL 与 I/O 性能无关!
对于异步编程,最强大的框架是twisted ,但如果您从未完成过此类编程,可能需要一段时间才能掌握它。通过使用线程池获得额外的 I/O 性能可能会更简单。
关于python - 在执行许多 I/O 绑定(bind)操作时如何在 Python 中最大化性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2971381/
我是一名优秀的程序员,十分优秀!