CN106648932A - 基于Python扩展模块的多进程共享系统及方法 - Google Patents

基于Python扩展模块的多进程共享系统及方法 Download PDF

Info

Publication number
CN106648932A
CN106648932A CN201611179092.XA CN201611179092A CN106648932A CN 106648932 A CN106648932 A CN 106648932A CN 201611179092 A CN201611179092 A CN 201611179092A CN 106648932 A CN106648932 A CN 106648932A
Authority
CN
China
Prior art keywords
module
python
memory
interface
rbtree
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201611179092.XA
Other languages
English (en)
Inventor
肖尧
孙云松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201611179092.XA priority Critical patent/CN106648932A/zh
Publication of CN106648932A publication Critical patent/CN106648932A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种基于Python扩展模块的多进程共享系统及方法,该方法包括以下步骤:步骤一、初始化全局管理器并解析输入参数;步骤二、分配指定名称和大小的共享内存;若已经存在,则执行步骤4,若不存在,则分配固定大小的内存空间;步骤三、初始化slab内存管理器,构建红黑树,并返回创建Python扩展对象;步骤四、调用功能方法,分析处理后返回PyObject对象。本发明具有更高的性能,经测试对比发现,操作更新100万的共享数据,耗时仅为2.5秒,访问速度提升近10倍;通过使用原子锁和信号机制,保护处理异常子进程,同时避免出现程序死锁现象,运行程序更加稳定,异常处理更加完善;合理使用内存管理机制,减少内存碎片化,内存利用更加高效。

Description

基于Python扩展模块的多进程共享系统及方法
技术领域
本发明涉及进程间数据共享技术领域,具体涉及一种基于Python扩展模块的多进程共享系统及方法。
背景技术
在Python开发环境中,进程间的交互往往需要共享数据,同时可能存在数据内容的频繁更新。multiprocessing是Python支持多进程管理的程序包,利用multiprocessing的Value,Array,Manager等结构方法能够创建共享的对象,多个进程访问该对象实现数据的共享。
multiprocessing提供多种方法对象实现进程间的数据共享。Manager采用代理与服务器的模式,由manager对象控制服务端进程,该进程包含的Python对象可以被其他进程通过代理的方式访问,实现进程间的数据共享。Value和Array是另一种简单对象,主进程创建对象的实例,并将数据存储在映射的共享内存中,通过参数传递的方式供其他进程使用。
以上描述的multiprocessing技术方案存在的主要缺点是:
1、Value结构为单个数据的共享,不能满足复杂的表结构共享,而Array结构仅允许使用索引访问共享的数据且个数固定,功能上受到很大的限制;
2、multiprocessing.Manager本身设计为代理与服务器模式,共享数据的性能较差,测试发现在manager中使用Dict对象更新100万的数据,耗时超过24秒。同时manager对象控制的服务器进程缺少健壮的异常处理机制,容易产生异常子进程。
发明内容
本发明克服了现有技术的不足,提供一种基于Python扩展模块的多进程共享系统及方法。
为解决上述的技术问题,本发明采用以下技术方案:
一种基于Python扩展模块的多进程共享方法,所述的方法包括以下步骤:
步骤一、初始化全局管理器并解析输入参数;
步骤二、分配指定名称和大小的共享内存,且所述名称具有唯一性;若已经存在,则执行步骤4,若不存在,则分配固定大小的内存空间;
步骤三、初始化slab内存管理器,构建红黑树,并返回创建Python扩展对象;
步骤四、调用功能方法,分析处理后返回PyObject对象。
更进一步的技术方案是所述步骤一包括类型、成员及方法的注册,以及模块名称、内存大小的参数解析。
更进一步的技术方案是所述步骤四中所述调用功能方法包括添加,更新,删除操作。
更进一步的技术方案是提供一种基于Python扩展模块的多进程共享系统,包括:
内存管理模块,用于定义内存管理的接口与程序结构,并且利用原子锁模块实现加锁处理;
红黑树模块,用于实现红黑树算法逻辑,提供初始化,插入,删掉方法;
共享内存模块,该模块实现共享内存的分配与回收接口;
原子锁模块,用于实现原子互斥锁逻辑,提供锁创建,加锁,解锁,锁销毁方法;
接口模块,用于利用内存管理模块,红黑树模块以及原子锁模块实现功能调用的接口;
封装模块,用于定义Python的扩展类型,注册对外开放的方法和属性;
所述共享内存模块、原子锁模块分别连接所述内存管理模块;所述内存管理模块连接所述接口模块;所述红黑树模块连接所述接口模块;所述原子锁模块分别连接所述红黑树模块和接口模块;所述接口模块连接所述封装模块。
与现有技术相比,本发明实施例的有益效果之一是:
1、本发明相比于multiprocessing等现有技术具有更高的性能,经测试对比发现,操作更新100万的共享数据,耗时仅为2.5秒,访问速度提升近10倍;
2、本发明通过使用原子锁和信号机制,保护处理异常子进程,同时避免出现程序死锁现象,运行程序更加稳定,异常处理更加完善;
3、本发明合理使用内存管理机制,减少内存碎片化,内存利用更加高效。
附图说明
图1为本发明一个实施例的设计步骤图。
图2为本发明一个实施例中设计步骤相对应的流程图。
图3为本发明另一个实施例的系统模块结构框图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
下面结合附图及实施例对本发明的具体实施方式进行详细描述。
实施例1
如图1和图2所示,根据本发明的一个实施例,本实施公开一种基于Python扩展模块的多进程共享方法,该方法的构思是在共享内存的基础上,首先通过slab内存管理机制优化内存,并使用红黑树结构快速的检索数据,接着利用原子互斥锁解决数据的冲突问题,最后以模块扩展的方式在多个Python进程间进行高效的共享数据。
具体的,本实施例基于Python扩展模块的多进程共享方法包括以下步骤:
步骤1,初始化全局管理器并解析输入参数,包括类型、成员及方法的注册,模块名称、内存大小的参数解析;
步骤2,分配指定名称和大小的共享内存,且名称具有唯一性,若已经存在,则执行步骤4,若不存在,则分配固定大小的内存空间;
步骤3,初始化slab内存管理器,构建红黑树,并返回创建Python扩展对象;
步骤4,调用功能方法,分析处理后返回PyObject对象,其功能方法包括添加,更新,删除等操作。
本实施例方法相比于multiprocessing等现有技术具有更高的性能,经测试对比发现,操作更新100万的共享数据,耗时仅为2.5秒,访问速度提升近10倍。
实施例2
如图3所示,根据本发明的另一个实施例,本实施例公开一种基于Python扩展模块的多进程共享系统,该系统采用模块化设计,不同的功能归属于不同的模块,模块之间利用接口提供服务(如图3所示)。其中,内存管理模块负责共享内存的分配和回收,避免造成内存碎片。红黑树模块能够高效的检索数据,提高数据访问的速度。原子锁模块除了优化加锁粒度外,对死锁问题进行了特殊处理,当出现进程异常崩溃时,由信号注册处理程序完成强制解锁,同时提供进程的挂起服务。
具体的,本实施例基于Python扩展模块的多进程共享系统包括:
内存管理模块(SLAB),该模块定义内存管理的接口与程序结构,并且利用原子锁模块实现加锁处理;
红黑树模块(RBTREE),该模块实现红黑树算法逻辑,提供初始化,插入,删掉等方法;
共享内存模块(SHMEM),该模块实现共享内存的分配与回收接口;
原子锁模块(SHMTX),该模块实现原子互斥锁逻辑,提供锁创建,加锁,解锁,锁销毁等方法;
接口模块(TABLE),该模块为统一的接口服务,利用内存管理模块,红黑树模块以及原子锁模块实现功能调用的接口;
封装模块(MAIN),该模块定义Python的扩展类型,注册对外开放的方法和属性。
所述共享内存模块、原子锁模块分别连接所述内存管理模块;所述内存管理模块连接所述接口模块;所述红黑树模块连接所述接口模块;所述原子锁模块分别连接所述红黑树模块和接口模块;所述接口模块连接所述封装模块。
本实施例以模块扩展的方式在多个Python进程间进行高效的共享数据。通过使用原子锁和信号机制,保护处理异常子进程,同时避免出现程序死锁现象,运行程序更加稳定,异常处理更加完善;合理使用内存管理机制,减少内存碎片化,内存利用更加高效。
在本说明书中所谈到的“一个实施例”、“另一个实施例”、“实施例”等,指的是结合该实施例描述的具体特征、结构或者特点包括在本申请概括性描述的至少一个实施例中。在说明书中多个地方出现同种表述不是一定指的是同一个实施例。进一步来说,结合任一个实施例描述一个具体特征、结构或者特点时,所要主张的是结合其他实施例来实现这种特征、结构或者特点也落在本发明的范围内。
尽管这里参照发明的多个解释性实施例对本发明进行了描述,但是,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。更具体地说,在本申请公开权利要求的范围内,可以对主题组合布局的组成部件和/或布局进行多种变型和改进。除了对组成部件和/或布局进行的变型和改进外,对于本领域技术人员来说,其他的用途也将是明显的。

Claims (4)

1.一种基于Python扩展模块的多进程共享方法,其特征在于:所述的方法包括以下步骤:
步骤一、初始化全局管理器并解析输入参数;
步骤二、分配指定名称和大小的共享内存,且所述名称具有唯一性;若已经存在,则执行步骤4,若不存在,则分配固定大小的内存空间;
步骤三、初始化slab内存管理器,构建红黑树,并返回创建Python扩展对象;
步骤四、调用功能方法,分析处理后返回PyObject对象。
2.根据权利要求1所述的Python扩展模块的多进程共享方法,其特征在于所述的步骤一包括类型、成员及方法的注册,以及模块名称、内存大小的参数解析。
3.根据权利要求1所述的Python扩展模块的多进程共享方法,其特征在于所述的步骤四中所述调用功能方法包括添加,更新,删除操作。
4.一种基于Python扩展模块的多进程共享系统,其特征在于包括:
内存管理模块,用于定义内存管理的接口与程序结构,并且利用原子锁模块实现加锁处理;
红黑树模块,用于实现红黑树算法逻辑,提供初始化,插入,删掉方法;
共享内存模块,该模块实现共享内存的分配与回收接口;
原子锁模块,用于实现原子互斥锁逻辑,提供锁创建,加锁,解锁,锁销毁方法;
接口模块,用于利用内存管理模块,红黑树模块以及原子锁模块实现功能调用的接口;
封装模块,用于定义Python的扩展类型,注册对外开放的方法和属性;
所述共享内存模块、原子锁模块分别连接所述内存管理模块;所述内存管理模块连接所述接口模块;所述红黑树模块连接所述接口模块;所述原子锁模块分别连接所述红黑树模块和接口模块;所述接口模块连接所述封装模块。
CN201611179092.XA 2016-12-19 2016-12-19 基于Python扩展模块的多进程共享系统及方法 Pending CN106648932A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611179092.XA CN106648932A (zh) 2016-12-19 2016-12-19 基于Python扩展模块的多进程共享系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611179092.XA CN106648932A (zh) 2016-12-19 2016-12-19 基于Python扩展模块的多进程共享系统及方法

Publications (1)

Publication Number Publication Date
CN106648932A true CN106648932A (zh) 2017-05-10

Family

ID=58834818

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611179092.XA Pending CN106648932A (zh) 2016-12-19 2016-12-19 基于Python扩展模块的多进程共享系统及方法

Country Status (1)

Country Link
CN (1) CN106648932A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109298935A (zh) * 2018-09-06 2019-02-01 华泰证券股份有限公司 一种多进程单写多读无锁共享内存的方法及应用
CN110209595A (zh) * 2018-02-28 2019-09-06 贵州白山云科技股份有限公司 一种用于管理内存页的方法及装置
CN111176988A (zh) * 2019-12-20 2020-05-19 珠海金山网络游戏科技有限公司 基于GoCD的Python客户端

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101777012A (zh) * 2009-12-31 2010-07-14 深圳市蓝韵实业有限公司 一种三维图像服务器多任务管理调度方法
CN102369520A (zh) * 2011-09-02 2012-03-07 华为技术有限公司 虚拟内存区域的查询、遍历方法及装置
CN101739301B (zh) * 2009-12-09 2013-03-20 南京联创科技集团股份有限公司 Unix环境下进程间大量数据传输的方法
CN103197979A (zh) * 2012-01-04 2013-07-10 阿里巴巴集团控股有限公司 一种用于实现在进程间进行数据交互访问的方法及其装置
CN104951374A (zh) * 2015-06-15 2015-09-30 中国航空无线电电子研究所 一种基于多操作系统的多内核处理装置
CN105260177A (zh) * 2015-09-21 2016-01-20 广东大工数值仿真研究院有限公司 基于SiPESC平台的Python扩展模块开发方法
CN106095601A (zh) * 2016-06-16 2016-11-09 广东工业大学 一种多进程并发解算差分服务器系统及其实现方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739301B (zh) * 2009-12-09 2013-03-20 南京联创科技集团股份有限公司 Unix环境下进程间大量数据传输的方法
CN101777012A (zh) * 2009-12-31 2010-07-14 深圳市蓝韵实业有限公司 一种三维图像服务器多任务管理调度方法
CN102369520A (zh) * 2011-09-02 2012-03-07 华为技术有限公司 虚拟内存区域的查询、遍历方法及装置
CN103197979A (zh) * 2012-01-04 2013-07-10 阿里巴巴集团控股有限公司 一种用于实现在进程间进行数据交互访问的方法及其装置
CN104951374A (zh) * 2015-06-15 2015-09-30 中国航空无线电电子研究所 一种基于多操作系统的多内核处理装置
CN105260177A (zh) * 2015-09-21 2016-01-20 广东大工数值仿真研究院有限公司 基于SiPESC平台的Python扩展模块开发方法
CN106095601A (zh) * 2016-06-16 2016-11-09 广东工业大学 一种多进程并发解算差分服务器系统及其实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
万明: "《VegaPrime视景仿真开发技术》", 30 June 2015, 国防工业出版社 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110209595A (zh) * 2018-02-28 2019-09-06 贵州白山云科技股份有限公司 一种用于管理内存页的方法及装置
CN109298935A (zh) * 2018-09-06 2019-02-01 华泰证券股份有限公司 一种多进程单写多读无锁共享内存的方法及应用
CN111176988A (zh) * 2019-12-20 2020-05-19 珠海金山网络游戏科技有限公司 基于GoCD的Python客户端
CN111176988B (zh) * 2019-12-20 2023-07-04 珠海金山数字网络科技有限公司 基于GoCD的Python客户端系统

Similar Documents

Publication Publication Date Title
DE112010004652B4 (de) Zuverlässige Replikation mit hohem Durchsatz von umgewandelten Daten in Datensystemen
CN109144994A (zh) 索引更新方法、系统及相关装置
US20180173745A1 (en) Systems and methods to achieve sequential consistency in replicated states without compromising performance in geo-distributed, replicated services
US9904701B2 (en) Method and apparatus for concurrent access of mixed services
US7769789B2 (en) High performant row-level data manipulation using a data layer interface
WO2020228534A1 (zh) 一种基于微服务组件的数据库系统及相关方法
CN106648932A (zh) 基于Python扩展模块的多进程共享系统及方法
US20140279986A1 (en) System and Method for Performing a Transaction in a Massively Parallel Processing Database
US20170249358A1 (en) System and Method for Parallel Optimization of Database Query using Cluster Cache
EP3347815B1 (en) Action-based routing of a transaction in an online transaction processing system
WO2021068689A1 (zh) 数据处理方法和相关装置
WO2024060956A1 (zh) 一种混合数据库管理方法、装置、混合数据库及电子设备
JP7039765B2 (ja) バージョンベースのテーブルロック
CN105608197A (zh) 一种高并发下Memcache数据的获取方法及系统
DE102021108294B4 (de) System und verfahren für skalierbare hardware-kohärente speicherknoten
EP1249764A2 (en) Processor system
CN107168810A (zh) 一种计算节点内存共享系统及读、写操作内存共享方法
CN1266602C (zh) 用于锁定表目的方法和设备及用于并行处理的计算机系统
DE112018003988T5 (de) Zwischenclusterkommunikation von live-in-registerwerten
US20040117372A1 (en) System and method for controlling access to system resources
CN111680036B (zh) 一种基于图存储的配置管理数据库
CN102298648A (zh) 开放式实时数据库跨进程访问方法
CN109391489B (zh) 一种网元配置数据的存储处理方法及装置
GB2506539B (en) Interception of database queries for delegation to an in memory data grid
CN112131238A (zh) 一种交易状态机设计方法、处理装置和处理方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170510