Python3使用两种不同的并发机制:多线程和多进程。 在 Python 中创建线程最常见的方法是使用 Thread 类,它有两个方法:start() 和 join()。start() 方法创建新线程,而 join() 方法等待其他线程完成后再返回。
python多线程经常用于读取文件等IO操作多的地方或处理来自http服务器收发数据的场景下。 线程的优点是轻量级、快速执行,与进程相比,线程的开销非常低(线程只需要内存)。 线程的缺点是:很难调试,因为线程无法访问它们之间的任何共享状态;如果一个线程失败,很难找出原因! 线程是一种在进程中创建独立内存空间的机制。每个线程都可以拥有自己的内存空间和对磁盘存储的访问。 如果一个程序需要访问文件或数据库连接等共享资源,它必须使用锁来限制程序内所有线程对这些资源的访问。这使得我们在编写相互通信的程序时,需要锁定代码中的每个共享资源。 虽然线程是并发机制的,但同一时刻只能执行一个线程。这是由于Python全局解释器锁定的缘故。所以Python的多线程只是相对意义上的多线程。和C++,Java中的多线程本质上是不一样的。 例如:
VSCode下执行结果: Python 异步库 AsyncIO库补充了 Python 中的并发执行。在这个库的帮助下,一个进程不需要等待另一个进程停止才能运行。也就是说多进程模块允许您同时在计算机上运行多个进程,每个进程都有自己的内存空间并可以访问文件或数据库等共享资源。这类似于同时运行多个任务,但不是让它们都在同一个 CPU 内核上运行——这会减慢速度——你可以并行使用多个 CPU(每个进程一个)。多进程是一种程序的多个实例(每个实例都有自己的内存空间)运行的方式。在 Python 中,一个程序意味着一个进程。一个进程有一个线程来帮助执行该进程。 例如:
线程可以以更快的速度在任务之间切换。启动线程被认为比启动进程更快。 如上所述,CPU密集型任务在多进程模块中执行得很好,而多线程则适用于 IO 密集型任务。 CPU 密集型任务很重,则在使用 Python 中的多进程模块时会更好。 例如:
结果: |
|