我有一个 Python 3.6 脚本,它是多线程的,可以在具有 12 个内核的 Windows 10 机器上运行。
我想运行脚本的多个实例,但我担心 Python 的 GIL 问题在脚本的每个实例的性能方面。
执行以下任何操作都可以解决此问题,因为我的印象是,当我运行脚本的实例时,它运行的 Python 进程仅在一个 CPU 内核上运行,并且从该内核上的脚本"时间片"中调用的每个线程......
因此将:
答:在自己的CMD窗口中启动脚本的每个实例允许操作系统自动处理在其自己的内核上启动每个脚本父Python进程,并防止发生任何锁定...
或
B:通过快捷方式启动每个 CMD 会话,该快捷方式将其与特定核心的关联性设置,然后运行 Python 脚本,以便 python 进程及其线程在 CMD 进程设置为使用的特定核心上运行......
或
C:我对线程和Python GIL如何工作的理解是不正确的,我需要了解...
任何帮助将不胜感激。
我想运行脚本的多个实例
那就去做吧!
我担心 Python 的 GIL 问题在脚本的每个实例的性能方面。
"GIL 问题"只是任何单个多线程 Python 进程中的问题:属于同一 Python 进程的线程不会在同一时刻执行 Python 代码。 但是,每个 Python 进程都有自己的 GIL,没有什么能阻止一个 Python 进程中的线程与其他 Python 进程中的线程同时运行。
将 (A( 在其自己的 CMD 窗口中启动脚本的每个实例 [...在自己的核心上运行每个] Python 进程。
否,因为 SMP 平台(即大多数多处理器系统(上的任何进程都有"自己的内核"是不正常的。内核是操作系统用于运行线程/进程的资源,应用程序通常没有理由知道或关心哪个内核在任何给定时刻运行哪个线程/进程。
(B( 通过设置其与特定内核的亲和力的快捷方式启动每个 CMD 会话。
某些操作系统允许您这样做,但除非您的应用程序有非常特殊的需求,否则通常没有任何好处。 通常,您应该只信任操作系统调度程序来尽可能高效地调度进程和线程。