珍爱生命,使用python

http://www.zhuzhonghua.com/essays/2012/07/19/zhenaishengming-shiyongpython/

今天在写测试程序时,用到了Python的多线程。

首先声明,在真实环境中不要使用Python的多线程,如果要用,那也得用C写的扩展。

碰到一个所有人都会遇到的问题,要结束,强制结束某一个线程。

网上也查了很多资料,一般都是要DIY设计,通过信号啊,变量啊,等等。

我宁愿用异常让整个程序退出,也不愿这么写。

当然Python的设计哲学是不建议强制结束线程的。

在查看Thread的所有方法时,发现了一个_Thread__stop()的方法,果然好用。

在此做个记录。

再次声明,这只是在测试时,为了简单,直接,才使用的方法。

如果在真实环境中使用,后果自负。

======分割线================== C++真的不适合网络游戏开发。

我们先建立几个共识,这样分析起来比较方便。

1,C++代码要比Python代码效率不止高一点两点,有人做过测试,大概是20倍左右。

2,看代码的时间要比写代码的时间多很多,而且大部分时间在改BUG。

3,最经常出现的,也是最痛苦的BUG,内存泄露,空指针,野指针,内存写坏。

4,团队里上面这些BUG也许只占5%,但是会占用95%的时间,而且有些BUG是在正式运营的时候才出现的,所以你知道这造成的影响。而且即使出现了这些BUG,一时半会也不一定能改掉。

5,Python写起来要比C++写起来快。

6,如果你用了线程,那么就和3一样了。

如果我做一个策划的需求,使用Python要比使用C++写的快,不止快一点。

而且你也知道,策划的需求变化是随时的,经常的,如果使用C++来应对这种变化,明显是慢的。

但是如果使用Python来做,就会很快了;而且策划也可以配合修改。

使用C++改BUG时,如果是碰到野指针,内存写坏,内存泄露,那你就祈祷吧。

使用Python就不会出现这个问题。

而且改其他的BUG,Python也更容易修改,当然也更快了。

使用C++很容易写出Hard-Test的代码,于是正确性就有问题了。

这方面可以参考PG的H&P。

当然C++的优势在效率,而且可以利用多核的优势。

在此奉劝使用多线程的C++使用者,能用多进程,就不要用多线程。

于是我可以使用多进程的方式来利用多核的优势。

效率上达不到要求,那我就多开几个进程,来保证业务及时完成。

这样确实硬件成本增加了,要多买几台机器来多运行几个进程。

可是这多出来的几个硬件成本,相对于研发的成本不知道省了多少。

包括待遇,时间,以及过长时间带来的其它非研发人员的成本, 以及使用C++导致的BUG带来的各种损失,包括不能及时改掉BUG带来的时间损失,以及程序出错带来的运营损失。等。

所以从总体上来看,这其实是节省了成本。

而且按照这种思路,以大局考虑,总体考虑,来分析下面的问题。

二八原理,当分析程序的效率时,只需要找出那20%的代码,来优化,就可以达到很好的效果。

而且按照上帝的说法,过早优化是万恶之源。

所以可以使用C++写扩展来改写那20%的代码,就可以达到优化的目的。

而且从总体上来看,这才是优化之道。

这样看来,使用Python代替C++的前提是你得有一个可以多进程代替多线程的服务器机制。

C++有自己的优势,而且使用C++的人,尤其是使用C++写服务器的人,天生对内存和效率敏感。

总结下来,C++适合写稳定的,不会随便改动的代码,比如网络层。而Python适合写经常变化的代码,比如策划的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值