如何在执行许多I/O绑定操作时最大限度地提高Python的性能?

Rhu*_*arb 9 python

我有一种情况,我下载了很多文件.现在一切都在一个主要的Python线程上运行,每隔几分钟下载多达3000个文件.问题是这样做的时间太长了.我意识到Python没有真正的多线程,但有没有更好的方法呢?我正在考虑启动多个线程,因为I/O绑定操作不应该要求访问全局解释器锁,但也许我误解了这个概念.

Ale*_*lli 16

多线程对于加速网络上的I/O的特定目的来说很好(尽管异步编程可以提供更高的性能).CPython的多线程非常"真实"(本机操作系统线程) - 您可能正在考虑的是GIL,它是阻止不同线程同时运行Python代码的全局解释器锁.但是所有I/O原语在等待系统调用完成时都会放弃GIL,因此GIL 与I/O性能无关!

对于异步编程,最强大的框架是扭曲的,但是如果你从未完成过这样的编程,它可能需要一段时间才能掌握它.通过使用线程池可以更简单地获得额外的I/O性能.


Amb*_*ber 5

可以随时看看multiprocessing.