对于多线程是否能在 Python 中工作,我有点困惑。
我知道关于这个问题有很多疑问,我也读过很多,但是我还是很困惑。根据我自己的经验,我知道在 Python 中确实可以实现多线程,并且看到其他人在 StackOverflow 上发布了自己的答案和示例。那么,为什么每个人都一直说 Python 被 GIL 锁定,而且一次只能运行一个线程呢?这显然是有效的。还是有什么我不明白的地方?
许多发布者/回复者也不断提到线程是有限的,因为它不使用多个核心。但我认为它们仍然有用,因为它们同时工作,因此可以更快地完成合并后的工作量。否则怎么会有 Python 线程模块呢?
更新:
谢谢你到目前为止所有的答案。我的理解是,多线程只能在某些 IO 任务中并行运行,但对于受 CPU 限制的多个核心任务,一次只能运行一个。
I'm not entirely sure what this means for me in practical terms, so I'll just give an example of the kind of task I'd like to multithread. For instance, let's say I want to loop through a very long list of strings and I want to do some basic string operations on each list item. If I split up the list, send each sublist to be processed by my loop/string code in a new thread, and send the results back in a queue, will these workloads run roughly at the same time? Most importantly will this theoretically speed up the time it takes to run the script?
另一个例子可能是,如果我可以渲染和保存四个不同的图片使用 PIL 在四个不同的线程,这是否比处理图片一个接一个更快?我想这个速度元件才是我真正想知道的,而不是正确的术语是什么。
我也知道多处理模块,但我现在的主要兴趣是中小型任务负载(10-30秒) ,因此我认为多线程将更为合适,因为子进程启动起来会很慢。