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

Multiprocessing & Multithreading - Theoretical Clarification

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

任务描述:

假设我设置了两个 py 脚本。每个脚本是 运行 宁两个 IO 绑定任务(API 调用)与多线程(最大工作人员为 2)。

问题:

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

  2. 如果我使用 Pycharm 创建两个单独的项目,其中每个项目都有自己的 Python 解释器。这样的设置是不是把task变成了multiprocessing和multithreaded?因为我们有两个 Python 解释器 运行ning 并且每个 运行ning 有两个线程?

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

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


Does such a setting turn the task into multiprocessing and multithreaded?

如果两个进程完全独立,从不交谈,我认为称其为“多进程任务”并没有真正的意义。您有多个进程 运行ning,但是 Python 程序上下文中的“多处理”通常意味着一个连贯的程序,该程序利用多个进程来完成一项共同任务。