试验Pyrex:增加IPC2扩展模块
平时工作相关开发,经常用c++写程序,进程见通讯主要用消息队列和共享内存;
python没有直接操作消息队列共享内存的模块,就想上网找一个;
google了几下,在韩国的python用户组网站找到一个ipc2.pyx,除了pyx代码外,
其他什么都看不懂(都是韩文);
http://www.python.or.kr/pykug/ipc2_2epyx
google一下pyx相关资料,需要Pyrex来处理为python模块;
先用easy_install Pyrex安装了Pyrex;
然后执行:Pyrexc ipc2.pyx 有两个错误警告:long * char * 类型转换的问题;
修改了一下消息队列的读写方法;处理通过;
下面就开始了我的编译之旅!
我的机器Windows 2003装了Python2.4的Windows版本,又装了cygwin,cygwin自带了python2.4;
先在Windows下编译,用
gcc -c -fPIC ipc2.c -I/usr/include/python2.4 -L/usr/lib/python2.4
提示一堆错误;转念一想,windows又不支持ipc,编译了无用!!尴尬!
切换到cygwin下编译;
gcc -c -fPIC ipc2.c -I/usr/include/python2.4 -L/usr/lib/python2.4
转换为共享库:
gcc –shared ipc2.o -o ipc2.so -L/lib/python2.4/config -lpython2.4
得到ipc2.so
执行python测试;import ipc2,提示没有这个模块;
执行看来一下site-packages目录下的其他的python模块,发现是dll扩展名;
mv ipc2.so ipc2.dll 再次测试 import ipc2 成功了;
在RedHat linux 9下编译:
python版本是2.2;刚刚达到了Pyrex的要求;又搜索了一下pyrex相关资料,学会了setup.py
写了setup.py如下:
from distutils.core import setup
from distutils.extension import Extension
from Pyrex.Distutils import build_ext
setup(name=’ipc2′, ext_modules=[Extension(”ipc2″, [”ipc2.pyx”])],
cmdclass = {’build_ext’: build_ext}
)
用easy_install 安装了pyrex后;
执行python setup.py install
提示编译错误,PyMODINIT_FUNC 没有定义;
在我windows机器上的python24的include目录中的pyport.h中定义;
加入到linux机器的pyport.h中。
再次执行python setup.py install,编译通过,成功安装;
from ipc2 import *
m = mq(0×1001,0666)
m.read()
OK!!!可以读写;
其他的暂时还没有测试;用的时候再测试吧;
隐姓埋名的猫 » links for 2007-12-14 说,
十二月 14, 2007 @ 4:35 pm
[…] 米粒之光华 » 试验Pyrex:增加IPC2扩展模块 (tags: python message 消息队列 技术收藏) […]