Multithreading Python3.6:在单独的CMD会话中运行相同的多线程Python脚本会解决Pythons GIL问题吗
我有一个Python3.6脚本,它是多线程的,在一台有12个内核的Windows10机器上运行 我想运行多个脚本实例,但我担心Pythons GIL在每个脚本实例的性能方面的问题 做下面的任何一项都可以解决这个问题,因为我的印象是,当我运行一个脚本实例时,它运行的Python进程只在一个CPU内核上运行,每个线程都在该内核上的脚本“时间片”中调用 因此,我们将: 答:在自己的CMD窗口中启动脚本的每个实例允许操作系统自动处理在自己的核心上启动每个脚本父Python进程,并防止发生任何锁定 或 B:通过一个快捷方式启动每个CMD会话,该快捷方式设置其与特定核心的关联性,然后运行Python脚本,以便Python进程及其线程在CMD进程已设置为使用的特定核心上运行 或 C:我对线程和Python GIL如何工作的理解是不正确的,我需要理解 任何帮助都将不胜感激 我想运行脚本的多个实例 那就去做吧 就脚本的每个实例的性能而言,我担心Pythons GIL的问题 “GIL问题”只是任何单个多线程Python进程中的一个问题:属于同一个Python进程的线程不会在同一时刻执行Python代码。但是,每个Python进程都有自己的GIL,没有任何东西可以阻止一个Python进程中的线程与另一个Python进程中的线程同时运行 将(A)在自己的CMD窗口中启动脚本的每个实例[…在自己的核心上运行每个]Python进程 不,因为SMP平台(即大多数多处理器系统)上的任何进程都不具有“自己的内核”。内核是操作系统用于运行线程/进程的资源,应用程序通常没有理由知道或关心在任何给定时刻哪个核正在运行哪个线程/进程 (B) 通过快捷方式启动每个CMD会话,该快捷方式设置其与特定核心的关联性 有些操作系统允许您这样做,但通常没有好处,除非您的应用程序有非常特殊的需求。通常,您应该信任操作系统调度器尽可能高效地调度进程和线程 我想运行脚本的多个实例 那就去做吧 就脚本的每个实例的性能而言,我担心Pythons GIL的问题 “GIL问题”只是任何单个多线程Python进程中的一个问题:属于同一个Python进程的线程不会在同一时刻执行Python代码。但是,每个Python进程都有自己的GIL,没有任何东西可以阻止一个Python进程中的线程与另一个Python进程中的线程同时运行 将(A)在自己的CMD窗口中启动脚本的每个实例[…在自己的核心上运行每个]Python进程 不,因为SMP平台(即大多数多处理器系统)上的任何进程都不具有“自己的内核”。内核是操作系统用于运行线程/进程的资源,应用程序通常没有理由知道或关心在任何给定时刻哪个核正在运行哪个线程/进程 (B) 通过快捷方式启动每个CMD会话,该快捷方式设置其与特定核心的关联性Multithreading Python3.6:在单独的CMD会话中运行相同的多线程Python脚本会解决Pythons GIL问题吗,multithreading,python-3.x,multiprocessing,Multithreading,Python 3.x,Multiprocessing,我有一个Python3.6脚本,它是多线程的,在一台有12个内核的Windows10机器上运行 我想运行多个脚本实例,但我担心Pythons GIL在每个脚本实例的性能方面的问题 做下面的任何一项都可以解决这个问题,因为我的印象是,当我运行一个脚本实例时,它运行的Python进程只在一个CPU内核上运行,每个线程都在该内核上的脚本“时间片”中调用 因此,我们将: 答:在自己的CMD窗口中启动脚本的每个实例允许操作系统自动处理在自己的核心上启动每个脚本父Python进程,并防止发生任何锁定 或 B
有些操作系统允许您这样做,但通常没有好处,除非您的应用程序有非常特殊的需求。通常,您应该相信操作系统调度程序能够尽可能高效地调度进程和线程。Python的
线程
使用真实的系统线程,因此,线程化代码不一定只限于一个CPU—底层操作系统的线程调度程序可以,有时会将它们分布在不同的CPU上。然而,由于可怕的GIL,没有两个线程可以同时运行,因此并行执行是不可能的。但是,如果您运行脚本的多个实例,它们将在不同的Python解释器实例中运行,因此每个实例都有自己的GIL,因此多个实例可以并行运行。Python的线程化使用真实的系统线程,因此,线程代码不一定只限于一个CPU—底层操作系统的线程调度程序可以,有时会将它们分布在不同的CPU上。然而,由于可怕的GIL,没有两个线程可以同时运行,因此并行执行是不可能的。但是,如果您运行脚本的多个实例,它们将在不同的Python解释器实例中运行,因此每个实例都有自己的GIL,因此多个实例可以并行运行。