所以我的...错误...应用程序执行以下操作:
- 在队列中收听“工作”
- 每台服务器产生大约 100 个工作人员(跨约 3 个服务器),每个工作人员都在队列中侦听
- 每个工作人员基本上都会做一些网络工作(ssh、snmp 等)(I/O 密集型),然后搅动输出(非常 cpu 密集型)
我已经完成了所有工作multiprocessing
,而且效果很好。但是:每个工作人员使用的内存都比我想要的多(根据顶部,大约 30MB RES,450MB VIRT)。所以我有两个问题:
我确定为什么开销如此之高的最佳方法是什么?我猜 COW 工作得不太好......我可以使用哪些模块在多处理之前获取所有主线程内存的快照,以便我可以尝试减少初始占用空间?
鉴于我的大部分进程都是 cpu 绑定的,将我的代码移植到 gevent/twisted 会有好处吗?我想利用每台服务器的双六核。
谢谢!