多处理和多线程 - 理论澄清



我有两个Python并发相关的问题,需要别人澄清。

任务描述:

假设我设置了两个py脚本。每个脚本运行两个带多线程的IO-bound任务(API调用((最大工作程序为2(。

问题:

  1. 如果我不使用虚拟环境,并通过全局Python解释器(系统范围Python安装中的解释器(运行这两个脚本。这是否使我描述的任务成为单进程和多线程的?既然我们使用一个解释器(单个进程(,并且有两个脚本运行总共4个线程?

  2. 如果我使用Pycharm创建两个独立的项目,其中每个项目都有自己的Python解释器。这样的设置是否会将任务转换为多处理和多线程?既然我们有两个Python解释器在运行,每个解释器运行两个线程?

每个正在运行的解释器进程都有自己的GIL,它与碰巧正在运行的其他解释器中的任何其他GIL都是分开的。与正在运行的脚本相关联的项目和虚拟环境是不相关的。虚拟环境是为了隔离不同版本的Python和库,这样一个项目的库就不会干扰另一个项目中的库。

如果像python script.py一样单独运行两个脚本,这将启动两个不受另一个影响的独立解释器。


这样的设置会将任务变成多处理和多线程吗?

我认为称之为";多进程任务";如果这两个过程彼此完全独立并且从不交谈。您有多个进程在运行,但是";多处理";在Python程序的上下文中,通常意味着一个连贯的程序,它使用多个进程来完成一个公共任务。

最新更新