代码之家  ›  专栏  ›  技术社区  ›  Mark Smith

python 3.6:将在单独的cmd会话中运行相同的多线程python脚本来解决pythons gil问题

  •  0
  • Mark Smith  · 技术社区  · 6 年前

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

    我想运行脚本的多个实例,但我担心pythons gil问题,因为脚本的每个实例的性能。

    在我的印象中,当我运行脚本的一个实例时,它运行的python进程只在一个cpu核上运行,每个线程都是从脚本的“时间片”中调用的。

    因此:

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

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

    C:我对线程和PythonGil如何工作的理解是不正确的,我需要理解…

    任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Solomon Slow    6 年前

    我想运行脚本的多个实例

    那就去做吧!

    我很担心pythons gil的问题,因为脚本的每个实例的性能。

    “gil问题”只是 单一的 多线程python进程:属于同一python进程的线程不会在同一时刻执行python代码。但是,每个python进程都有自己的gil,没有什么可以阻止一个python进程中的线程与另一个python进程中的线程同时运行。

    将(a)在自己的cmd窗口中启动脚本的每个实例[…在自己的内核上运行每个]python进程。

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

    (b)通过快捷方式启动每个CMD会话,该快捷方式将其关联性设置为特定的核心。

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