Python中的多线程并行运行

Posted

技术标签:

【中文标题】Python中的多线程并行运行【英文标题】:Multi Thread in Python run in parallel 【发布时间】:2020-11-10 09:06:25 【问题描述】:

我有一个关于 Python 中的多线程的问题。

我已经在 python 中尝试过多线程和多处理。

我得到的是 在多线程中,并行运行时会得到重复的结果。经过研究,我发现在multiThread中,Multithread可以更新同一个变量(race Condition)。

同时,在多处理中,它会顺利进行,不会像在多线程中那样出现问题。

问题, 我可以使用多线程,但机制就像多处理?因为我需要迁移超过 200 万条记录,并且我需要尽可能异步地运行该功能(我的笔记本电脑只有 4 个核心),所以我需要使用多线程。

有人可以向我解释一下上面的问题吗?

【问题讨论】:

【参考方案1】:

在多线程中,每个 线程 将与生成它们的父进程共享相同的内存空间。但是在多线程中,每个进程都有自己的内存空间。

但是,在多线程中,您需要使用锁(信号量/互斥锁),(例如threading.Lock() 来防止竞争条件。并不是说多处理不会有竞争条件,如果您可以拥有它专门共享同一个对象而不是它的副本。但默认情况下它会复制该对象。

多线程也受到 python 的 GIL(全局解释器锁)的限制,它确保只有一个线程同时运行。因此,如果您在两个线程上运行密集的计算任务,它并不能真正提高速度,因为只有一个线程可以同时处于活动状态。

但是,多处理可以轻松克服它,因为它在多个进程上运行,每个进程将由操作系统的调度程序处理并并行运行。

一般经验法则: 如果您的流程是计算密集型的,请使用流程 如果您的进程是 I/O 密集型的,请使用线程

如果你的线程需要并发访问同一个变量/对象等,你需要使用锁。

【讨论】:

以上是关于Python中的多线程并行运行的主要内容,如果未能解决你的问题,请参考以下文章

如何理解python的多线程编程

现在的多线程,就说两个线程吧(除主线程),是并行运行吗?

python之多线程原理

MySQL中的多线程?

python中的多线程和多进程编程

python的多线程为什么不能利用多核CPU?