由于领导提出的多进程方案有很多问题,进展缓慢。好在有另一个同事慢慢进展中,我主要是做各种单独的试验,集成各种技术进行尝试。
Python多子进程方案的核心是共享内存,除了mmap方式,还有shm方式,都是linux提供的共享内存方案。
无论哪种共享内存方式,都需要自行申请整块内存,然后在创建对象时,将对象数据放在共享内存区域,实现多进程都能访问的目的。
这就带来两个问题:
1、复杂对象的管理,例如数组和字典。必须自定义内存分配器,STL已经留出了接口,但是实现起来很麻烦(水平有限)。
2、Python创建的对象,在Python自己的内存池之中。想要将其改放到共享内存池中,难以避免要改动Python代码。
这两个问题实在懒得考虑。因为我之前提出的多线程、多动态库方案,可以很好的避免这两个问题,极大简化了设计。
不谈总体进展,记录一下最近慢慢实现的几个功能模块:
1、Python执行遇到错误时,打印错误信息。用Python提供的C回调接口实现。
2、在Python中定义Entity,在C++层将其分析出来,形成一个EntityDescription。目的是获得一些元信息,供很多地方使用。比如网络传递,就不要直接传递PyObject,而是自定义包结构,按类型传递属性和数据;又比如数据库存储等等。
3、重新阅读了skynet_mq,消息队列,基本搞清了逻辑。但是没写成代码,现在又忘了。
今天打算搞一搞ffpython,学习包装C++代码实现更简单的交互。架构中不一定能用到。