【发布时间】: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