试验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!!!可以读写;

其他的暂时还没有测试;用的时候再测试吧;

 

 

 

del.icio.us this!

1 Response so far »

  1. 1

    隐姓埋名的猫 » links for 2007-12-14 说,

    十二月 14, 2007 @ 4:35 pm

    […] 米粒之光华 » 试验Pyrex:增加IPC2扩展模块 (tags: python message 消息队列 技术收藏) […]

Comment RSS · TrackBack URI

Say your words

提示:如果你刚刚提交过评论,但是还没有被显示出来,请点击这里刷新一下: 刷新评论