【问题标题】:Python 3.6: Will running the same multi-threaded python script in separate CMD sessions get around Pythons GIL issuePython 3.6:将在单独的 CMD 会话中运行相同的多线程 python 脚本来解决 Python 的 GIL 问题
【发布时间】:2018-06-11 07:24:36
【问题描述】:

我有一个 Python 3.6 脚本,它是多线程的,在具有 12 个内核的 Windows 10 机器上运行。

我想运行脚本的多个实例,但我担心 Python 的 GIL 问题会影响每个脚本实例的性能。

是否可以解决此问题,因为我的印象是,当我运行脚本的一个实例时,它运行的 Python 进程仅在一个 CPU 内核上运行,并且每个线程都从脚本中调用'那个核心上的时间片......

因此会:

A:在其自己的 CMD 窗口中启动脚本的每个实例允许操作系统自动处理在其自己的核心上启动每个脚本父 Python 进程并防止发生任何锁定...

B:通过一个快捷方式启动每个 CMD 会话,该快捷方式将其关联到特定核心,然后运行 ​​Python 脚本,以便 Python 进程及其线程在 CMD 进程已设置为使用的特定核心上运行...

C:我对线程和 Python GIL 工作原理的理解不正确,我需要理解...

任何帮助将不胜感激。

【问题讨论】:

  • Python 的 threading 使用 真实 系统线程,因此,您的线程代码不一定仅限于一个 CPU - 底层操作系统的线程调度程序可以,有时会传播它们在不同的 CPU 上。但是,由于可怕的 GIL,不可能有两个线程同时运行,因此并行执行是不可能的。但是,如果您运行脚本的多个实例,它们将在不同的 Python 解释器实例中运行,因此每个实例都有自己的 GIL,因此多个实例可以并行运行。

标签: multithreading python-3.x multiprocessing


【解决方案1】:

我想运行脚本的多个实例

那就去做吧!

我担心每个脚本实例的性能方面的 Python GIL 问题。

“GIL 问题”只是任何单个多线程 Python 进程中的问题:属于同一 Python 进程的线程不会在同一时刻执行 Python 代码。但是,每个 Python 进程都有自己的 GIL,没有什么能阻止一个 Python 进程中的线程与其他 Python 进程中的线程同时运行。

将 (A) 在其自己的 CMD 窗口中启动脚本的每个实例 [...在其自己的核心上运行每个 Python 进程。

不,因为 SMP 平台(即大多数多处理器系统)上的任何进程都有“自己的内核”是不正常的。内核是操作系统用来运行线程/进程的资源,应用程序通常没有理由知道或关心在任何给定时刻哪个内核正在运行哪个线程/进程。

(B) 通过快捷方式启动每个 CMD 会话,该快捷方式将其关联到特定核心。

某些操作系统允许您这样做,但通常没有任何好处,除非您的应用程序有非常特殊需求。通常,您应该相信操作系统调度程序会尽可能高效地调度进程和线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多