Shared Memory Module for Python
新开的项目因为数据量不少且需要多线程,好在基本是静态的,所以打算使用共享内存。
数据维护模块打算用python来做,其本身只有mmap支持,于是找了Nikita的这么一个尚未成熟的外部模块。
安装很顺利,但是在64位服务器上,写小块数据总是报越界。
调试了一下,发现PyArg_ParseTuple()的返回值不对:
代码里接收string length的变量被定义为unsigned long,而PyArg_ParseTuple()定义中的返回值是int;
在开发平台上,可能是32bit的机器,int和和long都是32bit,于是跑的欢畅;
于是到64位机器,unsigned的高32bit就unassigned了,于是就出问题了。
这个故事告诉我们说,写代码要严谨。
BTW:
Python我想为了跨平台吧,所以C Porting函数都定义为int/long这种形式;
于是我觉得,如果只是*inx系统,还是u_int64_t/u_int32_t来的保险。

