一个减少多进程下python内存占用的小技巧

  在python中如果要使用fork或者multiprocess来做多进程,假如import的库很多或者很大,例如wxpython,查看各进程的内存占用你会发现两个进程的内存占用基本上相同,换句话说,如果第二个进程根本不需要用到wx的内容,它也会被加载到内存当中去。就拿wx来做例子,没有import t wx占用大概8M+内存,一旦import wx,内存马上飚升到27M+,如此一来,两个进程就要占50m+。以上数据这只是对一个很小的python程序而言,要是一个需要导入很多库文件的程序,那情况可就不一样了。

  经过几番尝试,笔者找到用__import__,在运行时再入库的方法。其实是非常简单的,例如以下例子:

 

from multiprocessing.managers import BaseManager from multiprocessing import freeze_support import os class MyManager(BaseManager): pass global manager if __name__ == '__main__': freeze_support() manager = MyManager() switch = __import__("myclass",globals(),locals()) manager.register("C", myclass.C) manager.start() gui = __import__("mygui", globals(),locals()) mygui.manager = manager app = mygui.MyApp(0) app.MainLoop() manager.shutdown() os._exit(0)

 

这样就可以避免两个进程加载不必要的库而早成内存的浪费。

你可能感兴趣的:(一个减少多进程下python内存占用的小技巧)