引用自知乎

Windows下面的multiprocessing跟Linux下面略有不同,Linux下面基于fork,fork之后所有的本地变量都复制一份,因此可以使用任意的全局变量;在Windows下面,多进程是通过启动新进程完成的,所有的全局变量都是重新初始化的,在运行过程中动态生成、修改过的全局变量是不能使用的。”这一段太有用了,顺序执行好好的,到了并行,修改过得全局变量全变了,搞死了


如果我现在需要使用一个全局的类的实例,则必须把他放在受保护的区域,否则开启新进程时对象会重新被实例化。

这就有一个矛盾,如果不放在受保护区域就会被重新实例化,否则就达不到全局的效果(新开辟的进程必须要能访问你定义的函数)。

所以最好不要用全局变量(对象)。如果非要用的话可以参考我现在的做法,把它在模块中实例化,模块是不会被重复导入的。