【发布时间】:2016-10-10 18:19:01
【问题描述】:
我目前正在检查一些预先存在的代码,目的是加快速度。有一些地方非常适合并行化。由于 Python 有 GIL,我想我会使用多进程模块。
但是,据我了解,这将在 Windows 上运行的唯一方法是,如果我使用 if __name__=='__main__' 保护从最高级别的脚本调用需要多个进程的函数。然而,这个特定的程序本来是作为一个模块分发和导入的,所以让用户复制和粘贴该保护措施会有点笨拙,我真的很想避免这样做。
就多处理而言,我是不走运还是误解了什么?或者有没有其他方法可以用 Windows 做到这一点?
【问题讨论】:
-
你会怎么想?
-
Windows 上的@Natecat MP 没有分叉,因此如果没有
if \_\_name\_\_,它将像子进程炸弹一样发挥作用。 -
Tyler,考虑了一下,我能看到这个工作的唯一方法是,如果你像在 Windows(基于套接字的服务器)上那样对待 MP 逻辑,并在用户程序的 if 中调用一个服务器对象名称。请记住,它必须非常大或复杂。如果 main 将实例化为
myLib.As_master()或myLib.As_client(),然后在您的库中检查Is_master(),所有这些都是将静态模块变量设置为True 或False 之类的静态方法。不要让它在你的库中导入任何东西,而是让所有东西都导入它。 1/2 -
2/2 只是不要把它变成神模块。另外请记住,您只需为使用 MProcessing 的模块导入它。
-
@HarryJohnston Python 可以,但它有一个叫做全局解释器锁的东西,因此一次只有一个线程在执行。 GIL 一直是一个很大的烦恼来源,大量人口一直试图谋杀一段时间 - wiki.python.org/moin/GlobalInterpreterLock
标签: python windows multiprocessing