首页 > 解决方案 > Python中的多线程并行运行

问题描述

我对 Python 中的多线程有疑问。

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

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

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

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

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

标签: pythonmultithreadingconcurrencymultiprocessing

解决方案


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

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

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

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

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

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


推荐阅读