CN117170738B - Python与Fortran互调用的方法、系统、设备及存储介质 - Google Patents

Python与Fortran互调用的方法、系统、设备及存储介质 Download PDF

Info

Publication number
CN117170738B
CN117170738B CN202311136946.6A CN202311136946A CN117170738B CN 117170738 B CN117170738 B CN 117170738B CN 202311136946 A CN202311136946 A CN 202311136946A CN 117170738 B CN117170738 B CN 117170738B
Authority
CN
China
Prior art keywords
fortran
python
container
code
module
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.)
Active
Application number
CN202311136946.6A
Other languages
English (en)
Other versions
CN117170738A (zh
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.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202311136946.6A priority Critical patent/CN117170738B/zh
Publication of CN117170738A publication Critical patent/CN117170738A/zh
Application granted granted Critical
Publication of CN117170738B publication Critical patent/CN117170738B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本申请涉及计算机语言技术领域,尤其涉及一种Python与Fortran互调用的方法、系统、设备及存储介质,方法包括下载镜像文件并安装容器引擎,容器引擎用于在本地启动容器并运行镜像;使用镜像启动容器将Fortran代码与Python代码挂载到容器中;Python调用Fortran时将Fortran代码转换为Python模块,修改Python代码,调用Fortran语言转换的模块;Fortran调用Python时将Python代码转换为C++可调用的库,修改Fortran代码并将C++库中的函数包装成可供Fortran调用的子程序,在Fortran代码中调用C++子程序;启动Python程序等待Python程序运行结束并查看运行结果。本申请能够解决在面向数值预报容器云平台的研发运维计算资源混合调度场景下实现Fortran与Python的互调用,同时解决维护成本高以及配置环境复杂的问题。

Description

Python与Fortran互调用的方法、系统、设备及存储介质
技术领域
本申请涉及计算机语言技术领域,尤其涉及一种Python与Fortran互调用的方法、系统、设备及存储介质。
背景技术
C++和Python的互调用是指在同一个程序中,同时使用C++和Python编写的代码能够相互调用彼此的函数和对象。在实际应用中,有时候需要在某个项目中同时使用C++和Python。例如,C++可能被用来实现性能敏感的算法,而Python则被用来进行数据处理和可视化等任务。此时需要将C++和Python代码集成到同一个程序中,并且能够相互调用,以便实现更加复杂和高效的应用。以上两者互调用有多种实现方式,例如通过cPython,将Python代码转换成c扩展模块,再将其导入c++程序中。
Fortran是一种为科学计算而设计的语言,其拥有许多内置的科学计算库,对于大规模计算、并行计算、数值计算等有着非常出色的表现。Python是一种高级语言,具有代码简洁易懂、易学易用等特点,应用于快速开发原型、实现数据分析和机器学习等领域。Python还有丰富的库和工具,支持多种编程范式,例如函数式编程和面向对象编程。在数值预报计算中会同时需要用到上述两种语言,取两种语言各自的优势领域进行应用。因此涉及到了两种语言的互相调用。再考虑到两种语言互相调用的可移植性,通过容器化的方式提供开箱即用的环境就显得十分必要。
在当前的现实应用面向数值预报容器云平台的研发运维计算资源混合调度场景下,kubernetes与slurm作业混合调度平台。用户需要通过平台调用kubernetes的接口创建封装好的容器,并在容器中进行相关配置,这其中就包含了Fortran与Python的代码互相调用。
但是目前Fortran与Python的互调用存在如下问题:并无支持Python与Fortran语言的互调用技术,两种编程语言的互相调用需要做特殊适配,例如不能将C++与Python的互调用技术直接应用到Python与Fortran的互调用过程中;Fortran与Python的互调用使用复杂,需要繁琐且复杂的环境配置流程,需要将代码编译为动态链接库或者函数库等中间态文件,并且为程序中的每个文件都进行单独的适配;维护成本高,使用C++和Python的互调用需要维护两种不同的代码库,并确保它们之间的兼容性和正确性。这会增加程序的维护成本,尤其是在项目规模较大或者开发周期较长时;Fortran与Python的互调用需要依赖多个依赖库,这些库可能会带来额外的依赖关系、配置和编译问题,增加了开发和部署的复杂性。
综上所述,如何能够在面向数值预报容器云平台的研发运维计算资源混合调度场景下实现Fortran与Python的互调用,同时解决维护成本高以及配置环境复杂的问题是目前面临的难题。
发明内容
本申请提供了一种Python与Fortran互调用的方法、系统、设备及存储介质,可以解决在面向数值预报容器云平台的研发运维计算资源混合调度场景下实现Fortran与Python的互调用,同时解决维护成本高以及配置环境复杂的问题。本申请提供如下技术方案:
第一方面,本申请提供一种Python与Fortran互调用的方法,所述方法包括:
下载镜像文件,在计算机系统中安装容器引擎,所述容器引擎用于在本地启动容器并运行镜像;
使用镜像启动容器;
将Fortran代码与Python代码挂载到容器中;
判断Python与Fortran语言的互调用方式:
当Python调用Fortran时,将Fortran代码转换为Python模块,修改Python代码,调用Fortran语言转换出的模块;
当Fortran调用Python时,将Python代码转换为C++可调用的库,修改Fortran代码并将C++库中的函数包装成可供Fortran调用的子程序,在Fortran代码中调用已经包装的C++子程序;
启动Python程序,等待Python程序运行结束,并查看运行结果。
在一个具体的可实施方案中,所述在计算机系统中安装容器引擎包括:
安装Docker、containerd或者crio等容器引擎,以便能够在本地使用Docker启动容器并运行镜像。
在一个具体的可实施方案中,所述使用镜像启动容器包括:
在命令行终端中,使用Docker命令启动某个容器,同时使用Docker Hub或者harbor等公共资源库中的相关命令来查找和下载镜像;
使用适当的参数,指定要启动的容器名称、要使用的镜像名称以及其他相关参数,如端口号、挂载卷等。
在一个具体的可实施方案中,所述将Fortran代码与Python代码挂载到容器中之前还包括:
确保要挂载的代码文件已经存储在本地计算机的某个目录中,以便能够将其挂载到容器中;使用Docker命令,将本地的目录与容器中的目录进行映射,以便能够在容器中访问本地代码文件。
在一个具体的可实施方案中,所述将Fortran代码转换为Python模块包括:
使用docker命令进入到容器中,使用镜像中的转换工具F2PY将Fortran代码转换为Python模块,并将其存储在容器中指定的位置。
在一个具体的可实施方案中,所述将Python代码进行转换为C++可调用的库包括:
通过docker命令进入到容器中,使用镜像中的工具CFFI将Python代码转换为C++可调用的库。
在一个具体的可实施方案中,所述将C++库中的函数包装成可供Fortran调用的子程序包括:
使用Fortran中提供的外部子程序语法,将C++库中的函数包装成可供Fortran调用的子程序。
第二方面,本申请提供一种Python与Fortran互调用的系统,采用如下的技术方案:
一种Python与Fortran互调用的系统,包括:
系统安装模块,用于下载镜像文件,在计算机系统中安装容器引擎,所述容器引擎用于在本地启动容器并运行镜像;
容器启动模块,用于使用镜像启动容器;
代码挂载模块,用于将Fortran代码与Python代码挂载到容器中;
语言调用模块,用于判断Python与Fortran语言的互调用方式:
当Python调用Fortran时,将Fortran代码转换为Python模块,修改Python代码,调用Fortran语言转换出的模块;
当Fortran调用Python时,将Python代码转换为C++可调用的库,修改Fortran代码并将C++库中的函数包装成可供Fortran调用的子程序,在Fortran代码中调用已经包装的C++子程序;
程序运行模块,用于启动Python程序,等待Python程序运行结束,并查看运行结果。
第三方面,本申请提供一种电子设备,所述设备包括处理器和存储器;所述存储器中存储有程序,所述程序由所述处理器加载并执行以实现如第一方面所述的一种Python与Fortran互调用的方法。
第四方面,本申请提供一种计算机可读存储介质,所述存储介质中存储有程序,所述程序被处理器执行时用于实现如第一方面所述的一种Python与Fortran互调用的方法。
综上所述,本申请的有益效果至少包括:因Fortran编程语言使用逐渐减少,维护Fortran代码成本增加,通过Python程序调用Fortran代码可以增加老旧代码的运行效率,从而减少开发新代码的工作量;Fortran语言有着强大的数值运算能力,Python有着通俗易懂的语法设计和大量第三方库,通过Fortran语言调用Python语言,能够结合两种语言的优点,增加程序的计算能力,从而提升数值计算的运行效率;通过预先构建好的互调用环境,能够让用户更加方便的达到Python与Fortran互调用的效果。
通过基于容器技术,将所需的环境打包成为一个镜像,用户只需在此镜像中运行Python和Fortran程序,即可避免配置复杂环境,能够解决如何能够在面向数值预报容器云平台的研发运维计算资源混合调度场景下实现Fortran与Python的互调用,同时解决维护成本高以及配置环境复杂的问题。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,并可依照说明书的内容予以实施,以下以本申请的较佳实施例并配合附图详细说明如后。
附图说明
图1是数值预报容器云平台研发运维环境一体化的系统架构图。
图2是本申请中的实施例在数值预报容器云平台的逻辑流程图。
图3是本申请实施例中Python与Fortran互调用的方法的流程示意图。
图4是本申请实施例中Python与Fortran互调用的系统的结构框图。
图5是本申请实施例中Python与Fortran互调用的的电子设备的框图。
附图标记:410、系统安装模块;420、容器启动模块;430、代码挂载模块;440、语言调用模块;450、程序运行模块。
具体实施方式
下面结合附图和实施例,对本申请的具体实施方式做进一步详细描述。以下实施例用于说明本申请,但不用来限制本申请的范围。
首先,对于本申请所涉及的若干名词进行介绍。
Python:是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。它的语言结构以及面向对象的方法,旨在帮助程序员为小型的和大型的项目编写逻辑清晰的代码。
Fortran:它是通用的编译型指令式编程语言,特别适用于数值计算和科学计算。它在1957年由IBM开发出来,是世界上第一个被正式采用并流传至今的高级编程语言。
互调用(互操作):编程语言间的互调用(互操作)指的是在不同编程语言之间传递和使用数据、函数、对象等的能力。这意味着,如果你有两个用不同编程语言编写的程序,它们可以通过某种机制相互通信,以便在一个程序中使用另一个程序中定义的函数或数据类型。
数据流:指的是数据在软件或系统中流动的方式和路径。在计算机科学中,数据流通常用来描述数据在软件系统中的传递和处理,涉及到数据源、数据接收者、数据传输和数据处理等概念。
神经网络库(Neural Network Library):是一种软件库,提供了实现神经网络的工具和功能,使开发人员能够轻松地构建、训练和部署神经网络模型。常见的神经网络库包括TensorFlow、PyTorch、Keras、Caffe、MXNet、Theano等。
镜像:是指一个只读的文件系统,包含应用程序所需的所有组件,如代码、依赖库、配置文件、运行时环境等。镜像是容器(Container)的基础,容器是在镜像的基础上创建的运行时实例。
容器:是一种虚拟化技术,可以在一个操作系统上运行多个隔离的应用程序或服务。容器通过操作系统级别的虚拟化技术,将应用程序或服务运行所需的所有组件打包在一起,包括代码、依赖库、配置文件、运行时环境等,形成一个可独立运行的应用程序或服务容器。
Docker:是一种开源的容器化平台,可以帮助开发者打包、部署和运行应用程序。Docker 利用容器技术,将应用程序和其所需的所有组件(如代码、依赖库、配置文件、运行时环境等)打包成一个独立的容器,可以在任何地方运行,保证了应用程序的可移植性、可靠性和一致性。Docker 容器是一种轻量级的虚拟化技术,比传统的虚拟机技术更为轻量级和高效,不需要额外的操作系统支持,可以在同一主机上运行多个容器,每个容器都具有独立的文件系统、网络、进程空间和资源限制。
Containerd:是一个开源的容器运行时管理器,是 Kubernetes、Docker 和其他容器编排和管理系统的核心组件之一。它负责管理容器的生命周期、镜像存储和网络连接等,并提供了一个 API 和 GRPC 接口,可以与其他容器编排和管理系统进行交互。
CRI-O:是一个开源的容器运行时实现,专为 Kubernetes 而设计,符合Kubernetes Container Runtime Interface (CRI) 规范,可以作为 Kubernetes 的默认容器运行时。
容器运行时(Container Runtime):是负责启动、停止、管理容器的软件组件,它是容器技术的核心之一。容器运行时负责将容器镜像解压缩、加载容器应用程序和库、设置容器环境变量、启动容器进程和文件系统、挂载文件系统和网络等。容器运行时通常运行在操作系统的内核层之上,使用操作系统提供的虚拟化和隔离技术实现容器的隔离和安全。
Singularity:Singularity 是一个容器平台。它允许您创建和运行以可移植和可重复的方式打包软件的容器。您可以在笔记本电脑上使用 Singularity 构建容器,然后在世界上许多最大的 HPC 集群、本地大学或公司集群、单个服务器、云中或大厅下的工作站上运行它。
Kubernetes:是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
Volcano:Volcano是CNCF下首个也是唯一的基于Kubernetes的容器批量计算平台,主要用于高性能计算场景。它提供了Kubernetes目前缺少的一套机制,这些机制通常是机器学习大数据应用、科学计算、特效渲染等多种高性能工作负载所需的。
可选地,本申请以各个实施例提供的Python与Fortran互调用的方法用于电子设备中为例进行说明,该电子设备为终端或服务器,终端可以为手机、计算机、平板电脑、扫描仪、电子眼、监控摄像头等,本实施例不对电子设备的类型作限定。
本申请首先提出一种Python与Fortran互调用的方法,为了更清楚地说明本申请实施例的技术方案,参照图1,为面向数值预报容器云平台的研发运维环境一体化的系统架构图,图2为本申请中的实施例在数值预报容器云平台的逻辑流程,具体如下:
开始之后,用户选择对应镜像与相关配置并提交Kubernetes任务,后台接收任务请求解析生成yaml文件,后台通过yaml文件对Kube-apiserver发起vcjob创建请求从而创建vcjob。Volcano根据vcjob创建pod并调度到合适节点,用户通过工具进入pod容器终端,并使用容器中提供的Python与Fortran互调用工具配置相关代码。之后用户通过页面发起容器固化与转化操作,并将转化后的镜像在slurm上进行作业运行,最后结束。
在具体使用场景下,Python与Fortran的互调用需要用户根据具体代码进行调用。整个作业运行流程中,用户需要通过终端工具进入特定镜像的容器中进行配置,Python以及Fortran相关代码可通过挂载卷的方式挂载至容器中。
其中Python与Fortran语言的互调用分为两个方面,一方面为Pythom调用Fortran,另一方面为Fortran调用Python,两种调用方式使用完全不同的技术栈。
参照图3,是Python与Fortran语言互调用的方法的流程示意图。
如下是当Python调用Fortran时的具体方法:
S101,下载镜像文件并安装容器引擎。
在实施中,首先在网站或者文档中下载镜像文件,并确保镜像文件已经被正确下载和存储。此外还需要在计算机系统中安装Docker、containerd或者crio等容器引擎,以便能够在本地使用Docker启动容器并运行镜像。
S102,使用镜像启动容器。
具体的,在命令行终端中,使用Docker命令启动某个容器,同时使用Docker Hub或者harbor等公共资源库中的相关命令来查找和下载镜像。
可选的,使用适当的参数,指定要启动的容器名称、要使用的镜像名称以及其他相关参数,如端口号、挂载卷等。
S103,将Fortran代码与Python代码挂载到容器中。
在实施中,将Fortran代码与Python代码挂载到容器之前,确保要挂载的代码文件已经存储在本地计算机的某个目录中,以便能够将其挂载到容器中。使用Docker命令,将本地的目录与容器中的目录进行映射,以便能够在容器中访问本地代码文件。
S104,将Fortran代码转换为Python模块。
将Fortran代码与Python代码挂载到容器之后,使用镜像中提供的工具,将Fortran代码转换为Python模块。具体的,使用docker命令进入到容器中,使用镜像中的转换工具F2PY将Fortran代码转换为Python模块,并将其存储在容器中指定的位置。
F2PY是用来连接Fortran和Python的Python包,能够将Fortran源程序转换为Python可用的程序。编译好后使用时直接在Python中导入即可。F2PY是 numpy的一部分,安装了numpy就已经包含F2PY,其能够被用来构建Python C/API扩展模块,从而更容易调用FORTRAN77/90/95子程序,FORTRAN77 common 数据块或FORTRAN90/95 module模块。
S105,调用Fortran语言转换出的模块。
具体的,在本地计算机中修改Python代码,以便能够调用刚刚转换出的Fortran模块。
S106,启动Python程序,等待Python程序运行结束,并查看运行结果。
可选的,如果需要保存运行结果,通过使用Docker命令,能够将容器中的文件复制到本地计算机的指定目录中。
以下是当Fortran调用Python时的具体方法:
S201,下载镜像文件并安装容器引擎。
在实施中,首先在网站或者文档中下载镜像文件,并确保镜像文件已经被正确下载和存储。此外还需要在计算机系统中安装Docker、containerd或者crio等容器引擎,以便能够在本地使用Docker启动容器并运行镜像。
S202,使用镜像启动容器。
具体的,在命令行终端中,使用Docker命令启动某个容器,同时使用Docker Hub或者harbor等公共资源库中的相关命令来查找和下载镜像。
可选的,使用适当的参数,指定要启动的容器名称、要使用的镜像名称以及其他相关参数,如端口号、挂载卷等。
S203,将Fortran代码与Python代码挂载到容器中。
在实施中,将Fortran代码与Python代码挂载到容器之前,确保要挂载的代码文件已经存储在本地计算机的某个目录中,以便能够将其挂载到容器中。使用Docker命令,将本地的目录与容器中的目录进行映射,以便能够在容器中访问本地代码文件。
S204,将Python代码转换为C++可调用的库。
在实施中,通过docker命令进入到容器中,使用镜像中的工具CFFI将Python代码转换为C++可调用的库。
CFFI提供了非常方便的方法能够嵌入Python代码,使用CFFI时,无需编写任何C代码,CFFI就会生成C类型的打包接口。
S205,在Fortran代码中调用已经包装的C++子程序。
具体的,修改Fortran代码,以便能够调用C++库,随后使用Fortran中提供的外部子程序语法,将C++库中的函数包装成可供Fortran调用的子程序,最后实现在Fortran代码中调用已经包装的C++子程序。
S206,启动Python程序,等待Python程序运行结束,并查看运行结果。
可选的,如果需要保存运行结果,通过使用Docker命令,能够将容器中的文件复制到本地计算机的指定目录中。
综上所述,本申请基于容器技术,将所需的环境打包成为一个镜像,用户只需在此镜像中运行Python和Fortran程序,即可避免配置复杂环境。因Fortran编程语言使用逐渐减少,维护Fortran代码成本增加,通过Python程序调用Fortran代码可以增加老旧代码的运行效率,从而减少开发新代码的工作量;Fortran语言有着强大的数值运算能力,Python有着通俗易懂的语法设计和大量第三方库,通过Fortran语言调用Python语言,能够结合两种语言的优点,增加程序的计算能力,从而提升数值计算的运行效率;通过预先构建好的互调用环境,能够让用户更加方便的达到Python与Fortran互调用的效果。
图4是本申请一个实施例提供的Python与Fortran互调用的系统的结构框图。该系统至少包括以下几个模块:
系统安装模块410,用于下载镜像文件,在计算机系统中安装容器引擎,容器引擎用于在本地启动容器并运行镜像;
容器启动模块420,用于使用镜像启动容器。
代码挂载模块430,用于将Fortran代码与Python代码挂载到容器中。
语言调用模块440,用于判断Python与Fortran语言的互调用方式。
当Python调用Fortran时,将Fortran代码转换为Python模块,修改Python代码,调用Fortran语言转换出的模块。
当Fortran调用Python时,将Python代码转换为C++可调用的库,修改Fortran代码并将C++库中的函数包装成可供Fortran调用的子程序,在Fortran代码中调用已经包装的C++子程序。
程序运行模块450,用于启动Python程序,等待Python程序运行结束,并查看运行结果。
图5是本申请一个实施例提供的电子设备的框图。该设备至少包括处理器401和存储器402。
处理器401可以包括一个或多个处理核心,比如:4核心处理器、8核心处理器等。处理器401可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器401也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器401可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器401还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器402可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器402还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器402中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器401所执行以实现本申请中方法实施例提供的Python与Fortran互调用的方法。
在一些实施例中,电子设备还可选包括有:外围设备接口和至少一个外围设备。处理器401、存储器402和外围设备接口之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口相连。示意性地,外围设备包括但不限于:射频电路、触摸显示屏、音频电路、和电源等。
当然,电子设备还可以包括更少或更多的组件,本实施例对此不作限定。
可选地,本申请还提供有一种计算机可读存储介质,计算机可读存储介质中存储有程序,程序由处理器加载并执行以实现上述方法实施例的Python与Fortran互调用的方法。
可选地,本申请还提供有一种计算机产品,该计算机产品包括计算机可读存储介质,计算机可读存储介质中存储有程序,程序由处理器加载并执行以实现上述方法实施例的Python与Fortran互调用的方法。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种Python与Fortran互调用的方法,其特征在于,所述方法包括:
下载镜像文件,在计算机系统中安装容器引擎,所述容器引擎用于在本地启动容器并运行镜像;
使用镜像启动容器;
将Fortran代码与Python代码挂载到容器中;
判断Python与Fortran语言的互调用方式:
当Python调用Fortran时,将Fortran代码转换为Python模块,修改Python代码,调用Fortran语言转换出的模块;
当Fortran调用Python时,将Python代码转换为C++可调用的库,修改Fortran代码并将C++库中的函数包装成可供Fortran调用的子程序,在Fortran代码中调用已经包装的C++子程序;
启动Python程序,等待Python程序运行结束,并查看运行结果。
2.根据权利要求1所述的Python与Fortran互调用的方法,其特征在于,所述在计算机系统中安装容器引擎包括:
安装Docker、containerd或者crio容器引擎,以便能够在本地使用Docker启动容器并运行镜像。
3.根据权利要求1所述的Python与Fortran互调用的方法,其特征在于,所述使用镜像启动容器包括:
在命令行终端中,使用Docker命令启动某个容器,同时使用公共资源库中的相关命令来查找和下载镜像;
使用适当的参数,指定要启动的容器名称、要使用的镜像名称以及其他相关参数。
4.根据权利要求1所述的Python与Fortran互调用的方法,其特征在于,所述将Fortran代码与Python代码挂载到容器中之前还包括:
确保要挂载的代码文件已经存储在本地计算机的某个目录中,以便能够将其挂载到容器中;使用Docker命令,将本地的目录与容器中的目录进行映射,以便能够在容器中访问本地代码文件。
5.根据权利要求1所述的Python与Fortran互调用的方法,其特征在于,所述将Fortran代码转换为Python模块包括:
使用Docker命令进入到容器中,使用镜像中的转换工具F2PY将Fortran代码转换为Python模块,并将其存储在容器中指定的位置。
6.根据权利要求1所述的Python与Fortran互调用的方法,其特征在于,所述将Python代码进行转换为C++可调用的库包括:
通过Docker命令进入到容器中,使用镜像中的工具CFFI将Python代码转换为C++可调用的库。
7.根据权利要求1所述的Python与Fortran互调用的方法,其特征在于,所述将C++库中的函数包装成可供Fortran调用的子程序包括:
使用Fortran中提供的外部子程序语法,将C++库中的函数包装成可供Fortran调用的子程序。
8.一种Python与Fortran互调用的系统,其特征在于,包括:
系统安装模块(410),用于下载镜像文件,在计算机系统中安装容器引擎,所述容器引擎用于在本地启动容器并运行镜像;
容器启动模块(420),用于使用镜像启动容器;
代码挂载模块(430),用于将Fortran代码与Python代码挂载到容器中;
语言调用模块(440),用于判断Python与Fortran语言的互调用方式:
当Python调用Fortran时,将Fortran代码转换为Python模块,修改Python代码,调用Fortran语言转换出的模块;
当Fortran调用Python时,将Python代码转换为C++可调用的库,修改Fortran代码并将C++库中的函数包装成可供Fortran调用的子程序,在Fortran代码中调用已经包装的C++子程序;
程序运行模块(450),用于启动Python程序,等待Python程序运行结束,并查看运行结果。
9.一种电子设备,其特征在于,所述设备包括处理器和存储器;所述存储器中存储有程序,所述程序由所述处理器加载并执行以实现如权利要求1至7任一项所述的一种Python与Fortran互调用的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有程序,所述程序被处理器执行时用于实现如权利要求1至7任一项所述的一种Python与Fortran互调用的方法。
CN202311136946.6A 2023-09-05 2023-09-05 Python与Fortran互调用的方法、系统、设备及存储介质 Active CN117170738B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311136946.6A CN117170738B (zh) 2023-09-05 2023-09-05 Python与Fortran互调用的方法、系统、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311136946.6A CN117170738B (zh) 2023-09-05 2023-09-05 Python与Fortran互调用的方法、系统、设备及存储介质

Publications (2)

Publication Number Publication Date
CN117170738A CN117170738A (zh) 2023-12-05
CN117170738B true CN117170738B (zh) 2024-03-15

Family

ID=88935987

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311136946.6A Active CN117170738B (zh) 2023-09-05 2023-09-05 Python与Fortran互调用的方法、系统、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117170738B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10042620B1 (en) * 2016-11-03 2018-08-07 Palantir Technologies Inc. Approaches for amalgamating disparate software tools
CN109324799A (zh) * 2018-09-25 2019-02-12 珠海市筑巢科技有限公司 一种代码编译方法、计算机装置及计算机可读存储介质
CN112379892A (zh) * 2020-10-29 2021-02-19 远光软件股份有限公司 喷氨预测代码的处理方法、装置、存储介质及终端设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2024501045A (ja) * 2020-12-28 2024-01-10 テンパー システムズ、インコーポレイテッド 共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10042620B1 (en) * 2016-11-03 2018-08-07 Palantir Technologies Inc. Approaches for amalgamating disparate software tools
CN109324799A (zh) * 2018-09-25 2019-02-12 珠海市筑巢科技有限公司 一种代码编译方法、计算机装置及计算机可读存储介质
CN112379892A (zh) * 2020-10-29 2021-02-19 远光软件股份有限公司 喷氨预测代码的处理方法、装置、存储介质及终端设备

Also Published As

Publication number Publication date
CN117170738A (zh) 2023-12-05

Similar Documents

Publication Publication Date Title
US11829787B2 (en) Multi-process model for cross-platform applications
US10019298B2 (en) Middleware interface and middleware interface generator
CA2768752C (en) Terminal device of non-android platform for executing android applications, and computer readable recording medium for storing program of executing android applications on non-android platform
WO2022016848A1 (zh) 一种根据服务角色的进行应用部署的方法及装置
US8739147B2 (en) Class isolation to minimize memory usage in a device
US20180074843A1 (en) System, method, and computer program product for linking devices for coordinated operation
CN112463123B (zh) 任务编译方法、装置、网络节点、系统及存储介质
CN115357369B (zh) 一种k8s容器云平台中CRD应用集成调用方法与装置
CN116860266A (zh) 应用容器化部署方法、装置、电子设备及存储介质
CN117170738B (zh) Python与Fortran互调用的方法、系统、设备及存储介质
CN109597611B (zh) 前端数据流控制组件开发系统、方法、设备及存储介质
CN114860401B (zh) 异构云桌面调度系统、方法、服务系统、装置及介质
US20230409417A1 (en) Automated generation of application programming interfaces for microservices
CN116382713A (zh) 构建应用镜像的方法、系统、设备和存储介质
CN109739666A (zh) 单例方法的跨进程调用方法、装置、设备及存储介质
CN109901826B (zh) 用于Java程序的数据处理方法、装置和电子设备
Huang et al. Design of Power System Simulation Software Based on Cloud Platform
CN117555558A (zh) 一种在嵌入式Linux操作系统上运行Android应用的方法
WO2022198308A1 (en) Method and system for a customized local build environment image
CN118057306A (zh) 安装包的生成方法、装置、服务器、介质和程序产品
CN114168139A (zh) 页面生成方法、装置、电子设备及程序产品
CN118092950A (zh) 面向异构超算的应用软件封装方法和系统
Iovanov et al. Containerizing Solution for a Highly Distributed Systems
CN118193107A (zh) 显示服务方法和装置、终端设备、计算机可读存储介质
CN116800854A (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
GR01 Patent grant
GR01 Patent grant