Skip to content

{ Monthly Archives } 十月 2008

深圳纪事

24号晚上8点36分,T107开出北京西站。25号晚上8点22分,停靠深圳罗湖车站。 在高中同学的帮助下,从地铁转公交,终于找到了落脚的南航富豪城酒店。第一感觉是,深圳的交通费真贵:地铁5块,公交上车2块,有的还2块5 。 26号周日,抽空去了一趟东莞塘厦——爸爸妈妈,哥哥嫂嫂,还有小浩洋都在那里,难得一次团圆。 27号到飞亚达大厦腾讯报道。不巧的是,部门秘书mm和主管gg都休假了,折腾到28号,才把大部分的手续办完:电脑能上网,OA能进,RTX能进,Token卡能用。 一楼是招行,二楼是餐厅,楼上还有一个甲骨文,和一堆不知名的小公司。 楼下公交车站是大冲站,往东是白石洲和世界之窗,往西是科技园,以及深圳大学。 酒店没有洗衣机,一堆衣服都还没有洗。 从深秋,回到盛夏。

用C语言扩展Python的功能

Pyton和C分别有着各自的优缺点,用Python开发程序速度快,可靠性高,并且有许多现成模块可供使用,但执行速度相对较慢;C语言则正好相反,其执行速度快,但开发效率低。为了充分利用两种语言各自的优点,比较好的做法是用Python开发整个软件框架,而用C语言实现其关键模块。本文介绍如何利用C语言来扩展Python的功能,并辅以具体的实例讲述如何编写Python的扩展模块。 一、简介 Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型软件系统的开发过程中。 与其它普通脚本语言有所不同,Python程序员可以借助Python语言提供的API,使用C或者C++来对Python进行功能性扩展,从而即可以利用Python方便灵活的语法和功能,又可以获得与C或者C++几乎相同的执行性能。执行速度慢是几乎所有脚本语言都具有的共性,也是倍受人们指责的一个重要因素,Python则通过与C语言的有机结合巧妙地解决了这一问题,从而使脚本语言的应用范围得到了很大扩展。 在用Python开发实际软件系统时,很多时候都需要使用C/C++来对Python进行扩展。最常见的情况是目前已经存在一个用C编写的库,需要在Python语言中使用该库的某些功能,此时就可以借助Python提供的扩展功能来实现。此外,由于Python从本质上讲还是一种脚本语言,某些功能用Python实现可能很难满足实际软件系统对执行效率的要求,此时也可以借助Python提供的扩展功能,将这些关键代码段用C或者C++实现,从而提供程序的执行性能。 本文主要介绍Python提供的C语言扩展接口,以及如何使用这些接口和C/C++语言来对Python进行功能性扩展,并辅以具体的实例讲述如何实现Python的功能扩展。 二、Python的C语言接口 Python是用C语言实现的一种脚本语言,本身具有优良的开放性和可扩展性,并提供了方便灵活的应用程序接口(API),从而使得C/C++程序员能够在各个级别上对Python解释器的功能进行扩展。在使用C/C++对Python进行功能扩展之前,必须首先掌握Python解释所提供的C语言接口。 2.1 Python对象(PyObject) Python是一门面向对象的脚本语言,所有的对象在Python解释器中都被表示成PyObject,PyObject结构包含Python对象的所有成员指针,并且对Python对象的类型信息和引用计数进行维护。在进行Python的扩展编程时,一旦要在C或者C++中对Python对象进行处理,就意味着要维护一个PyObject结构。 在Python的C语言扩展接口中,大部分函数都有一个或者多个参数为PyObject指针类型,并且返回值也大都为PyObject指针。 2.2 引用计数 为了简化内存管理,Python通过引用计数机制实现了自动的垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 下面的例子说明了Python解释器如何利用引用计数来对Pyhon对象进行管理: 例1:refcount.py class refcount: # etc. r1 = refcount() # 引用计数为1 r2 = r1 # 引用计数为2 del(r1) # 引用计数为1 del(r2) # 引用计数为0,删除对象 在C/C++中处理Python对象时,对引用计数进行正确的维护是一个关键问题,处理不好将很容易产生内存泄漏。Python的C语言接口提供了一些宏来对引用计数进行维护,最常见的是用Py_INCREF()来增加使Python对象的引用计数增1,用Py_DECREF()来使Python对象的引用计数减1。 2.3 数据类型 Python定义了六种数据类型:整型、浮点型、字符串、元组、列表和字典,在使用C语言对Python进行功能扩展时,首先要了解如何在C和Python的数据类型间进行转化。 2.3.1 整型、浮点型和字符串 在Python的C语言扩展中要用到整型、浮点型和字符串这三种数据类型时相对比较简单,只需要知道如何生成和维护它们就可以了。下面的例子给出了如何在C语言中使用Python的这三种数据类型: 例2:typeifs.c // build an integer PyObject* pInt = Py_BuildValue(“i”, 2003); assert(PyInt_Check(pInt)); [...]

离开

终于,要走了。 想走已经很久了。 06年底,从播客回到爱问,开始负责维护爱问视频搜索的时候,还是挺开心的:播客上线了,很多人在看; 爱问视频搜索,也有不少人在用。但渐渐的,跟主管(阎培)的相处变的不那么愉快了。07年五一假前, 主管找我谈话,字里行间透露出不满,好像不愿意兑现最初的承诺让我正式的留在新浪。于是我给主管发了一封email,说明了一下情况,希望她能给我一个准确的答复,如果不能留,那么我需要尽快的另外找工作了。 主管并没有回复我的email。五一假,回学校完成毕业论文。等我再回到公司的时候,似乎一切都没有发生过。只是离开的想法已经在脑海中悄悄的开始发芽了。 到了9月正式签约的时候,签的薪资在最初承诺的数字上打了一个不小的折扣。当时便想着,是否应该离开了。可是当时自己处于弱势,户口,经济压力,另外换工作的诸多不确定性,让自己最终还是选择了认命。 于是想着换部门,希望能换个心情重新开始。10月,终于如愿以偿的换到游戏事业部,开始做新版的新浪支付(前天自己用这个支付了3个CD,从银行返回的结果页面居然是404──那个页面的最初版本还是我写的)。新的部门,新的工作内容,新的主管。只是心情经历却如此的一致:从最开始的希望,到最后的深深的失望。 新的部门是因为新上一个项目,所以急着招人。当我搬过去的时候,还只有主管,绍明,彩虹和我四个人。后来,文利和常川来了,李季来了,钱钱来了。也有人来了又走了。那段时间,在17层的“熊猫馆”里,加班,通宵,一次又一次,推倒重来,一遍又一遍。没有ue,主管自己做,没有ui,我们自己切页面,自己写逻辑,自己写底层,自己搭服务器,从上到下都是自己动手做。 在重来的第三遍的时候,终于无法忍受了,跟主管抹开面子说开了以后,又一次,想离开了。支付上线了,计算机在线,tom 也都谈过了,可是,户口的转正定级还没有做完,不能走。只好,再一次转部门。 认识互动的王老大已经很久了,转过去才发现,果然是一个好领导。 08年4月,从游戏事业部转到互动社区。最开始跟刘博1一起做播客的运维。播客已经被运营的非常负责了,140台机器,Apache,Nginx,Squid,Varnish,MemcacheD,MemcacheDB,眼花缭乱的网络部署,复杂无比的页面拼装,再加上时不时出点故障,不停的提提案,切域名,切内网连接。稍微有点空闲的时候,还得想着新的改造方案。 后来书志来了,播客的机器都转给他来管理了,我开始重拾C语言,开始做CSF(Common Server Framework 通用服务器框架)二次开发。通用排序服务,色情图片检测,SSO(单点登录)的在线系统,以及最后的S3(Sina Simple Storage)的调度Dispatcher模块。 中间搬了好几次座位,同组的同事也来来回回换了好几次。最后离职的时候,请来吃饭的同事,除了同在朱岩这个S3组的,却只有源源,刘博他们了。支付的常川和文利打算单请,原来爱问的人,却大都去了开心网了。(ps,以后可以在开心网上找到我:我的id是 101982, 如需要邀请链接,可以用这个 http://www.kaixin001.com/reg/?uid=101982&usercode=e5766f2d598eabb4823ea4779b30e60d_101982) 。 离职进行的很顺利,档案转成个人存档依然留在海淀人才,户口也依然是海淀人才的集体户口,违约金依照新的劳动法取消了,而新的去处──深圳腾讯,也给我订好了半个月的酒店公寓,等着我过去。 在北京五年零一个月,61个月,1800多天。虽然最后户口留在了这里,可她依然不是我的家。拥挤的交通,混浊的空气,干燥的气候,高昂的房价,一切的一切,都令人望而却步。可这里也有北师大的蛋蛋网,有中关村无数的机会,有众多的好学校,从幼儿园到小学到初中到高中到大学,更别说那低的让人无法相信的高考录取分数线,无论是自己的打拼,还是下一代的成长, 这都是一个很吸引人的城市。 我还会回来的,也许,就在不远的将来。