一种获取进程信息的方法和设备与流程

文档序号:14774079发布日期:2018-06-23 02:32阅读:313来源:国知局
一种获取进程信息的方法和设备与流程

本发明涉及云计算技术领域,特别涉及一种获取进程信息的方法和设备。



背景技术:

随着计算机技术和网络技术的高速发展,云计算成为最流行的技术。著名的云计算开源平台Openstack是基于Python语言开发的。Google、Instagram、Dropbox、Youtube、 Reddit和Quora等公司都在使用Python语言来实现核心业务的开发。

Python语言是一种面向对象的解释型计算机程序设计语言。使用Python语言开发的程序在运行中如发生问题,一般通过查看日志和源码来调试、定位问题。为此业界针对Python 程序开发了一些有追踪功能的第三方工具,如Yappi,Heapy,Pyflame等。Yappi一般用于 Python多线程的追踪;Heapy通常是用来展示Python堆的各种信息;Pyflame使用Linux ptrace系统来收集追踪信息,并生成对应Python进程的火焰图。

现有的上述第三方工具,功能比较单一,可扩展性弱。如Pyflame只能生成火焰图,用于发现函数热点;而Heapy和Yappi只能追踪Python内存。



技术实现要素:

本发明实施例提供了一种获取进程信息的方法和设备,增强了Python解释器的追踪能力。

本发明实施例提供了一种获取进程信息的方法,包括:

Python解释器注册需要回调的事件;

在所述Python解释器执行Python进程的过程中,当所注册的事件发生时,所述Python 解释器触发事件回调,输出所述Python进程的进程信息。

本发明实施例还提供了一种获取进程信息的设备,所述设备上运行有一Python解释器和一Python进程,所述Python解释器执行所述Python进程;

所述Python解释器用于注册需要回调的事件;并在所注册的事件发生时,触发事件回调,输出所述Python进程的进程信息。

本发明实施例提供的另一种获取进程信息的设备包括:

事件注册模块,用于注册需要回调的事件;

事件回调模块,用于在Python解释器执行Python进程的过程中,当所注册的事件发生时,触发事件回调,输出所述Python进程的进程信息。

本发明实施例还提供包括至少一处理器和至少一存储器的获取进程信息的设备,所述至少一个存储器用于存储计算机程序,所述至少一个处理器用于调用所述至少一个存储器中的程序代码来执行所述本发明实施例所记载的方法。

本发明实施例还提供一种计算机存储介质,所述计算机存储介质上储存为计算机软件指令,所述计算机软件指令运行后使计算机执行本发明实施例所记载的方法。

本发明实施例的技术方案可以增强Python解释器的追踪能力,且不需要借助第三方工具、也无需修改业务代码。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例涉及的Python解释器的逻辑示意图;

图2为本发明实施例提供的Python解释器执行Python程序的流程示意图;

图3为本发明实施例提供的一种获取进程信息的方法流程示意图;

图4为本发明实施例提供的获取进程信息的设备的结构示意图;

图5为本发明实施例提供的获取进程信息的设备的逻辑结构图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

如图1所示为本发明实施例提供的Python解释器的逻辑示意图,包括事件模块102、加载模块104和接口模块106。Python解释器中实现了对象管理、模块管理、线程调度、内存管理等功能;并进一步在Python解释器中实现了加载机制和事件机制。

现有的Python解释器本身具有不错的自省能力,但没有将一些更细粒度的信息如线程切换、内存使用等提供给用户。本发明实施例的Python解释器中的事件模块102、加载模块104和接口模块106使得Python解释器具有了动态追踪的能力,将Python进程的进程信息提供给用户,从而无需依赖第三方追踪工具。

下面对Python解释器的各模块进行详细说明。

事件模块102通过在Python解释器的设定路径中添加事件回调钩子,用户可以利用 Python解释器提供的事件API(应用程序编程接口:Application Programming Interface) 注册可以触发事件回调的事件。Python程序执行过程中,每当Python解释器执行到相应的设定路径时,就会执行已注册事件的回调,并输出Python进程此时的上下文信息。用户可以在事件回调中实现对Python进程的进程信息的追踪。通过事件回调中获取的进程信息可以在任意时刻以任意方式输出,如存储在内存中、或输出到预先设定的文件中、或通过网络输出到消息队列等。作为示例,可以回调的事件可以包括如下事件的任意组合:内存申请、内存释放、函数调用、函数退出、线程创建、线程阻塞、线程运行、线程销毁、和异常创建等。

使用本发明实施例提供的Python解释器执行Python程序对应的Python进程的一个示例流程如图2所示。

首先用户通过事件API注册了需要回调的事件,然后Python进程按照图2所示的步骤执行,当用户注册的事件发生时,则触发相应的事件回调,如:

1)Python进程运行过程中开始执行某一线程,则相应触发线程创建事件的回调;

2)Python进程调用某一函数,则相应触发函数调用事件的回调;

3)Python进程创建了一个对象,则相应触发内存申请事件的回调;

4)Python进程的执行抛出了一个异常,则相应触发异常创建事件的回调。

加载模块104赋予了Python解释器进行动态追踪的能力。用户可以通过另一个进程,本发明实施例中称之为用户进程,在目标Python进程运行的任意时刻发送加载请求去通知 Python解释器执行加载操作。用户进程请求Python解释器加载设定的追踪逻辑并执行该追踪逻辑。实现这些追踪逻辑的代码也称为Agent代码;Agent代码可以基于本发明实施例的事件模块102和接口模块106来收集Python进程的进程信息。

接口模块106用于向用户提供Python进程的进程信息。Python进程的进程信息可以是 Python解释器通过事件回调直接获得的表征Python进程情况的信息,可以包括Python进程运行时的上下文信息(如某次内存申请请求的内存大小,或新创建的对象的类型等)。 Python进程的进程信息也可以是根据事件回调直接获得的上述信息进行处理后得到的统计数据(如线程切换次数、垃圾回收次数和回收时长、或内存布局等)。

图3所示的是本发明实施例提供的一种获取进程信息的方法流程示意图。

302:用户进程向Python解释器发起加载请求。

在Python解释器解释并执行Python进程的任意时刻(比如在Python进程开始执行时),用户进程可以通过信号发送加载请求、通知Python解释器进行加载操作。Python解释器在接收到用户进程发送的信号后,首先会判断是否是加载请求,如果是加载请求,则执行如下的304步骤。

304:Python解释器在收到加载申请后,与用户进程建立通讯连接。

306:用户进程向Python解释器发送Agent代码的路径。

用户进程和执行Python进程的Python解释器之间的通讯连接建立后,Python解释器加载Agent代码设定的追踪逻辑,并在Python进程上执行。

需要说明的是,用户进程还可以在向Python解释器发送Agent代码的路径的同时,携带控制参数。

308:Python解释器加载Agent代码、并注册需回调的事件。

在Python解释器上加载并执行Agent代码设定的追踪逻辑;由Agent代码通过事件API注册需要进行回调的事件。

如果Python解释器收到了控制参数,则可以将该控制参数作为执行Agent代码的命令行选项如sys.argv;根据该控制参数实现Agent代码设定的追踪逻辑有差异化地执行。

310:Python解释器继续执行Python进程,并触发事件回调。

Python进程继续执行业务逻辑;当Python进程执行过程中触发了事件回调,Agent代码所设定的追踪逻辑会接收到触发事件回调时Python进程的进程信息。

在获得了Python进程的进程信息后,Python解释器可以将进程细腻系对外输出,比如使用消息队列或信息通道向Linux系统发送上述进程信息。

312:用户进程向Python解释器发起卸载Agent代码的请求。

314:Python解释器收到卸载Agent代码的请求后,触发结束回调。

Python解释器触发结束回调后,则之前注册的事件发生时将不再产生事件回调。在触发结束回调的同时,Python解释器还可以清理事件回调所使用的资源。

图3所示的例子是由用户进程通过信号通知Python解释器卸载Agent代码的请求,其可以发生在Python进程运行的任意时刻。可选地、Python解释器也可以根据所接收到的控制参数来设置卸载Agent代码的时间和条件;或者等到下一次收到用户进程发起的加载请求时,Python解释器清空上次所加载的Agent代码。

本发明实施例公开了一种获取进程信息的方法,包括:

Python解释器注册需要回调的事件;

在Python解释器执行Python进程的过程中,当所注册的事件发生时,Python解释器触发事件回调,输出该Python进程的进程信息。

具体地、Python解释器可以通过如下方式注册需要回调的事件:Python解释器接收 Agent代码的路径;Python解释器加载该Agent代码,注册需要回调的事件。

可选地、Python解释器还可以接收控制参数,并根据该控制参数控制Agent代码所设定的追踪逻辑的执行。

进一步地,如图3的本发明实施例所示,Python解释器可以根据Python自身需要、或接收到的卸载请求、或者在由控制参数设定的条件下卸载Agent代码。

本发明上述实施例增强了Python解释器的追踪能力,不需要借助第三方工具、也无需修改业务代码。本发明实施例可以动态追踪一个正在运行中的Python进程,在不停止 Python进程的情况下获取进程信息。本发明实施例提供的追踪技术,通过Agent加载的方式可以动态加载用Python语言编写的任意追踪逻辑,方便追踪Python进程。进一步地, Python解释器还可以通过控制参数实现Agent代码设定的追踪逻辑有差异化地执行。

本发明实施例的技术方案可以作为分布式Python服务治理的基础,在不修改业务代码、无需重启Python进程的情况下,动态地向Python进程中注入trace信息,实现分布式服务的治理。

本发明实施例还公开了一种获取进程信息的设备,该设备上运行有一Python解释器和一Python进程,该Python解释器执行该Python进程;其中Python解释器的逻辑结构如图 1所示,用于使用本发明实施例上面公开的方法获取Python进程的进程信息,如通过如图 2和图3所示的方法实现。

本发明实施例还公开了一种如图4所示的获取进程信息的设备400,包括至少一个处理器401,至少一个存储器403以及至少一个通信接口404。

处理器401可以是一个通用中央处理器(CPU)、微处理器、特定应用集成电路 (application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。

所述通信接口404,可以是使用任何收发器一类的装置,用于与其他设备或通信网络之间的通信。这里的通信网络可以是以太网,无线接入网(Radio Access Network,RAN),无线局域网(Wireless Local Area Networks,WLAN)等。

存储器403可以是只读存储器(read-only memory,ROM)、可存储静态信息和指令的静态存储设备、随机存取存储器(random access memory,RAM)、或者可存储信息和指令的动态存储设备,也可以是电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(Compact Disc Read-Only Memory, CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器403可以是独立存在,存储器403也可以和处理器401集成在一起。

上述存储器403可用于存储执行本申请方案的应用程序代码;处理器401可用于执行存储器403中存储的应用程序代码。

作为具体实现的一种实施例,设备400可以包括多个处理器,例如图4中的处理器401 和处理器408。这些处理器中的每一个都可以是单核(single-CPU)处理器,也可以是多核 (multi-CPU)处理器。每个处理器本身,如处理器401可以包括一个或多个CPU,例如 CPU0和CPU1。

设备400还可以包括输出设备405和输入设备406。输出设备405和处理器401通信,可以以多种方式来显示信息。输出设备405可以是液晶显示器(liquid crystal display,LCD)、发光二极管(light emitting diode,LED)显示设备、阴极射线管(cathode ray tube,CRT)显示设备、或投影仪(projector)等。输入设备406和处理器401通信,可以以多种方式接收用户的输入。输入设备406可以是鼠标、键盘、触摸屏设备或传感设备等。

设备400可以是通用计算机设备、或者专用计算机设备。在具体实现中,设备400可以是台式机、便携式电脑、网络服务器、掌上电脑(Personal Digital Assistant,PDA)、移动手机、平板电脑、无线终端设备、通信设备、或嵌入式设备等。本申请实施例不限定设备400的类型。

如图5所示为本发明实施例公开的一种获取进程信息的设备的逻辑结构图。该设备包括事件注册模块502和事件回调模块504。

事件注册模块502,用于注册需要回调的事件;

事件回调模块504,用于在Python解释器执行Python进程的过程中,当所注册的事件发生时,触发事件回调,输出所述Python进程的进程信息。

事件注册模块502可以通过如下方式注册需要回调的事件:事件注册模块502接收 Agent代码的路径,并加载上述Agent代码,注册所述需要回调的事件。

上述设备还可以包括用于卸载Agent代码的卸载模块506。上述设备还可以用于接收控制参数,并根据该控制参数控制Agent代码的执行。

尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元,本文中所出现的单元的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个单元可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行,另外,所显示的或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元之间的间接耦合或通信连接可以是电性或其他类似的形式,本文中均不作限定。并且,作为分离部件说明的单元或子单元可以是也可以不是物理上的分离,可以是也可以不是物理单元,或者可以分不到多个电路单元中,可以根据实际的需要选择其中的部分或全部单元来实现本发明实施例方案的目的。

本领域技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机程序存储/分布在合适的介质中,与其它硬件一起提供或作为硬件的一部分,也可以采用其他分布形式,如通过Internet或其它有线或无线电信系统。

本申请是参照本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

以上对本发明所提供的技术方案进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1