分享

Python3多线程和多进程的区别

 新潮看世界 2023-03-12 发布于北京

Python3使用两种不同的并发机制:多线程和多进程。

在 Python 中创建线程最常见的方法是使用 Thread 类,它有两个方法:start() 和 join()。start() 方法创建新线程,而 join() 方法等待其他线程完成后再返回。 

thread = Thread(target=task)thread.start()thread.join()

python多线程经常用于读取文件等IO操作多的地方或处理来自http服务器收发数据的场景下。

线程的优点是轻量级、快速执行,与进程相比,线程的开销非常低(线程只需要内存)。

线程的缺点:很难调试,因为线程无法访问它们之间的任何共享状态;如果一个线程失败,很难找出原因! 

线程是一种在进程中创建独立内存空间的机制。每个线程都可以拥有自己的内存空间和对磁盘存储的访问。

如果一个程序需要访问文件或数据库连接等共享资源,它必须使用锁来限制程序内所有线程对这些资源的访问。这使得我们在编写相互通信的程序时,需要锁定代码中的每个共享资源。

虽然线程是并发机制的,但同一时刻只能执行一个线程。这是由于Python全局解释器锁定的缘故。所以Python的多线程只是相对意义上的多线程。和C++,Java中的多线程本质上是不一样的。

例如:

import threadingimport time//打印偶数def printEven():    for i in range(2, 10, 2):        time.sleep(1)        print(i)
threading.Thread(target=printnum).start()

VSCode下执行结果:

Python 异步库 AsyncIO库补充了 Python 中的并发执行。在这个库的帮助下,一个进程不需要等待另一个进程停止才能运行。


也就是说多进程模块允许您同时在计算机上运行多个进程,每个进程都有自己的内存空间并可以访问文件或数据库等共享资源。

这类似于同时运行多个任务,但不是让它们都在同一个 CPU 内核上运行——这会减慢速度——你可以并行使用多个 CPU(每个进程一个)。

多进程是一种程序的多个实例(每个实例都有自己的内存空间)运行的方式。

在 Python 中,一个程序意味着一个进程。一个进程有一个线程来帮助执行该进程。

例如:

process = Process(target=task)process.start()

线程可以以更快的速度在任务之间切换。启动线程被认为比启动进程更快。

如上所述,CPU密集型任务在多进程模块中执行得很好,而多线程则适用于 IO 密集型任务。

CPU 密集型任务很重,则在使用 Python 中的多进程模块时会更好。

例如:

from multiprocessing import Processimport sysimport io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')def print_func(arg='中国'): print('打印 : ', arg)
if __name__ == "__main__": names = ['中国', '北京', '南京'] procs = [] proc = Process(target=print_func) procs.append(proc)    proc.start() for name in names: # print(name) proc = Process(target=print_func, args=(name,)) procs.append(proc)        proc.start()         for proc in procs: proc.join()

结果:

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多