python+multiprocess+theano+pylucene--内存泄露解决方案

最近上的项目有TPS要求,串行代码不满足当前需求,需要改成多线程,就查了下Python的多线程,不查不知道,一查吓一跳.

第一,Python是一种动态语言,我的理解是,运行到某一行的时候,才是知道编译成机器码,而不行C、JAVA等 静态语言那样事先编译好再运行,这有一个显著的问题:运行效率低

第二,Python有一个GIL,全称,全局解释器锁,为了解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁,就是因为这个超级大锁的存在,某一个线程运行的时候,其他线程处于阻塞状态,这将严重影响多线程执行效率,甚至可以认为Python就是个单线程的程序。有时候用多线程的解决方案甚至比串行代码还要慢。

第三,引入多线程之后,安装的pylucene报错:RuntimeError: attachCurrentThread() must be called first,大致意思是在启动线程时候没绑定线程,解决办法如下:

vm_env = lucene.initVM(vmargs=['-Djava.awt.headless=true'])#启动Lucene的时候添加
vm_env.attachCurrentThread()#绑定线程
vm_env.detachCurrentThread()#销毁线程
没发现问题,当压力测试的时候,处理速度确实提升上去了,但发现一个问题:内存使用量只涨不消,运行4mins,程序崩溃,一步步查找问题,一开始就认为是pylucene的原因,于是&#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值