国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SiPESC平臺(tái)的Python擴(kuò)展模塊開發(fā)

2015-01-13 19:07陳飆松李云鵬陸旭澤
計(jì)算機(jī)輔助工程 2014年6期

陳飆松+李云鵬+陸旭澤

摘要: 基于Python的可擴(kuò)展性,針對(duì)SiPESC平臺(tái)對(duì)于動(dòng)態(tài)解釋型腳本語言環(huán)境的需求,設(shè)計(jì)并開發(fā)可動(dòng)態(tài)集成SiPESC平臺(tái)上系統(tǒng)管理、算法調(diào)用、分析計(jì)算等功能的Python擴(kuò)展模塊.討論擴(kuò)展模塊開發(fā)過程中的用戶需求、程序設(shè)計(jì)以及相關(guān)技術(shù).SiPESC.OPT與Python第三方庫的集成優(yōu)化算例表明,該擴(kuò)展模塊能順利驅(qū)動(dòng)SiPESC平臺(tái)上復(fù)雜工作流程,具有較強(qiáng)的實(shí)用性和靈活性.

關(guān)鍵詞: Python; SiPESC; 腳本語言; 擴(kuò)展模塊

中圖分類號(hào): TB115.1文獻(xiàn)標(biāo)志碼: B

0引言

隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,科學(xué)研究與科學(xué)計(jì)算之間的關(guān)系日益密切,人們對(duì)于科學(xué)計(jì)算工具的需求已不再局限于處理數(shù)值問題.各種格式的大型數(shù)據(jù)集的處理、新算法的實(shí)現(xiàn)、數(shù)據(jù)庫與互聯(lián)網(wǎng)等計(jì)算系統(tǒng)的搭建等問題都需要新工具解決.[1]Python以其優(yōu)越的跨平臺(tái)性和強(qiáng)大的科學(xué)計(jì)算功能,正獲得越來越多科研人員的青睞.不少商業(yè)CAE軟件也提供對(duì)Python腳本語言的支持,例如Abaqus二次開發(fā)環(huán)境提供的腳本接口就是基于Python語言進(jìn)行定制開發(fā)的.

目前,SiPESC平臺(tái)已經(jīng)實(shí)現(xiàn)對(duì)JavaScript腳本語言的支持,用戶可以通過JavaScript語言調(diào)用平臺(tái)上所有的功能插件完成各種任務(wù).為進(jìn)一步豐富SiPESC平臺(tái)的腳本語言環(huán)境,彌補(bǔ)JavaScript語言在模塊開放性等方面的不足,平臺(tái)開發(fā)小組引進(jìn)Python作為新的腳本支持引擎.在SiPESC平臺(tái)上Python具有以下優(yōu)勢(shì):

1)執(zhí)行相應(yīng)操作所需的代碼少,代碼編寫簡單.[2]

2)通過判斷、循環(huán)和數(shù)據(jù)存儲(chǔ)與處理等語句,易于實(shí)現(xiàn)人工智能控制和自動(dòng)化處理過程.

3)對(duì)優(yōu)化問題易于實(shí)現(xiàn)參數(shù)化分析,且代碼結(jié)構(gòu)合理易讀,便于修改.

4)可以編寫?yīng)毩⒌哪K,使用Python,C,C++和Fortran等語言擴(kuò)展SiPESC平臺(tái)的功能.

5)提供優(yōu)秀的異常拋出和處理機(jī)制,縮短調(diào)試腳本的時(shí)間.

1Python語言及其擴(kuò)展方法

1.1Python語言概述

Python是一門優(yōu)雅而健壯的編程語言,繼承傳統(tǒng)編譯語言的強(qiáng)大性和通用性,同時(shí)也借鑒簡單腳本和解釋語言的易用性.[3]其高效率的高層數(shù)據(jù)結(jié)構(gòu)和簡單易學(xué)的面向?qū)ο缶幊烫攸c(diǎn),在很多平臺(tái)上都得到很好的應(yīng)用,成為在這些平臺(tái)上進(jìn)行快速應(yīng)用程序開發(fā)的主流腳本語言.[4]Python能夠在Linux,Windows,Mac OS,F(xiàn)reeBSD和Solaris等主流操作系統(tǒng)中運(yùn)行,其代碼幾乎無須進(jìn)行任何修改就能在這些操作系統(tǒng)中執(zhí)行,具有很強(qiáng)的跨平臺(tái)性.自從1989年Guido van Rossum始創(chuàng)Python以來,經(jīng)過十幾年的發(fā)展,Python已經(jīng)包含一系列完善、簡易的標(biāo)準(zhǔn)庫,足以完成文本處理、算法實(shí)現(xiàn)、科學(xué)計(jì)算、文件管理、界面設(shè)計(jì)和網(wǎng)絡(luò)通信等常見任務(wù),同時(shí)其還提供一套豐富的API,能夠幫助程序員輕松地使用其他編程語言編寫擴(kuò)展模塊.這種可擴(kuò)展性讓程序員能靈活附加或定制工具,大大縮短開發(fā)周期,并使代碼的性能得到顯著提升.[3]

1.2Python的通用擴(kuò)展方法

早期的編程語言并不具備可擴(kuò)展性,程序員只能使用現(xiàn)有的功能而無法向該語言增加新的功能.Python作為最早一批提供可擴(kuò)展性能的語言,在支持使用純Python語言編寫擴(kuò)展的同時(shí),也支持C,C++和Java等主流編程語言的擴(kuò)展.抽象的動(dòng)態(tài)加載機(jī)制讓擴(kuò)展與解釋器之間的交互方式與Python的內(nèi)置模塊完全一致,并且不區(qū)分編寫擴(kuò)展所使用的語言.

Python擴(kuò)展模塊主要通過Python的C語言應(yīng)用程序編程接口Python/C API實(shí)現(xiàn),其創(chuàng)建過程主要分以下幾個(gè)步驟[57]:

1)包含Python頭文件.通過Python.h文件導(dǎo)入到Python API并完成必要的預(yù)處理定義.

2)編寫具體實(shí)現(xiàn)并封裝.使用其他編程語言實(shí)現(xiàn)具體的功能函數(shù)和類,并將其封裝成能讓Python解釋器識(shí)別的形式.

3)編寫初始化函數(shù).初始化函數(shù)主要完成模塊對(duì)象創(chuàng)建和導(dǎo)入工作.

4)編譯和鏈接.可以通過Python自身提供的distutils包或g++和gcc等編譯器完成編譯和鏈接.

除以上的擴(kuò)展方法外,也可以通過第三方的封裝工具,如Boost.Python,SWIG,Pyrex和Psyco等編寫Python的擴(kuò)展模塊.

2擴(kuò)展模塊的設(shè)計(jì)

傳統(tǒng)的Python擴(kuò)展模塊封裝方法為靜態(tài)封裝,即每項(xiàng)擴(kuò)展中增加一個(gè)新的功能,都需修改源代碼,并重新編譯.這種封裝方法工作量大,缺乏靈活性,開發(fā)效率低,也無法匹配SiPESC平臺(tái)的開放性.本文采用動(dòng)態(tài)封裝的方法,充分利用SiPESC平臺(tái)軟件體系的動(dòng)態(tài)性,實(shí)現(xiàn)對(duì)任意插件的自動(dòng)封裝而無須修改源代碼.這種自動(dòng)封裝技術(shù)也是SiPESC平臺(tái)腳本語言環(huán)境的體系結(jié)構(gòu)(見圖1)中的重要環(huán)節(jié).

圖 1SiPESC.LAB軟件體系結(jié)構(gòu)

Fig.1Software architecture of SiPESC.LAB

2.1擴(kuò)展模塊的系統(tǒng)分析

2.1.1用戶需求分析

不同的用戶對(duì)SiPESC平臺(tái)和Python腳本語言的了解程度不同,其使用Python擴(kuò)展模塊的目的也不盡相同.可以將Python擴(kuò)展模塊的用戶分成以下2類.

1)普通用戶,指對(duì)Python腳本語言了解很少甚至從未接觸過Python,僅想通過腳本調(diào)用SiPESC平臺(tái)的插件進(jìn)行一般計(jì)算分析或其他基本操作的用戶.對(duì)于該類用戶,要盡量使擴(kuò)展模塊中調(diào)用SiPESC平臺(tái)功能插件所要使用的腳本代碼規(guī)范化,讓他們能通過使用手冊(cè)中的介紹或示例很容易地編寫腳本、調(diào)用插件.為此,Python擴(kuò)展模塊的設(shè)計(jì)要結(jié)構(gòu)清晰,層次分明,不容易造成混淆,讓用戶一目了然.同時(shí),擴(kuò)展模塊中的類名、函數(shù)名要盡量與原有JavaScript腳本引擎一致,保證那些JavaScript用戶也能很快適應(yīng)新的腳本引擎.endprint

2)高級(jí)用戶,指非常熟悉Python語言并能熟練使用Python的一些第三方擴(kuò)展庫的用戶.他們不僅想通過腳本使用平臺(tái)的功能,同時(shí)還想利用Python的第三方庫進(jìn)行一些高級(jí)應(yīng)用,實(shí)現(xiàn)多模塊的集成.為了能讓平臺(tái)的功能與Python的第三方庫更好地結(jié)合,需要在設(shè)計(jì)擴(kuò)展模塊時(shí)盡量使用Python的內(nèi)建數(shù)據(jù)類型,同時(shí)讓模塊里的方法更加通用,完善對(duì)常用第三方庫中數(shù)據(jù)類型的支持.

2.1.2任務(wù)分析

基于SiPESC平臺(tái)的Python擴(kuò)展模塊的價(jià)值在于為Python腳本語言與SiPESC集成平臺(tái)之間搭建一座橋梁,在極大擴(kuò)展Python功能的同時(shí)也方便平臺(tái)中腳本語言的使用.任何一臺(tái)安裝SiPESC集成平臺(tái)和Python環(huán)境的用戶計(jì)算機(jī),都可以在不啟動(dòng)平臺(tái)的情況下,使用幾行簡單的腳本代碼調(diào)用平臺(tái)的各個(gè)功能,而高級(jí)用戶更是能結(jié)合平臺(tái)的計(jì)算分析功能以及Python第三方庫的其他功能,搭建一個(gè)功能強(qiáng)大的集成環(huán)境.

通過獨(dú)立的腳本代碼即可調(diào)用SiPESC的各功能插件,需要讓擴(kuò)展模塊完全脫離平臺(tái)的GUI界面,而通過鏈接SiPESC平臺(tái)中插件管理相關(guān)的動(dòng)態(tài)庫實(shí)現(xiàn)兩者的交互.平臺(tái)插件與Python第三方庫的結(jié)合使用,需要規(guī)范擴(kuò)展模塊的數(shù)據(jù)類型,盡可能使用Python的內(nèi)建類型,提高數(shù)據(jù)類型在各擴(kuò)展中的兼容性.同時(shí), 針對(duì)SiPESC平臺(tái)的軟件結(jié)構(gòu)體系,需要擴(kuò)展模塊必須具有一定的動(dòng)態(tài)性,即對(duì)于已有或未來開發(fā)的插件都能在不修改代碼、不重新編譯的情況下被擴(kuò)展模塊動(dòng)態(tài)地加載使用.

2.1.3接口分析

為實(shí)現(xiàn)Python腳本與SiPESC平臺(tái)的交互,需要分析SiPESC平臺(tái)插件管理機(jī)制,尋找關(guān)鍵的接口,并實(shí)現(xiàn)在擴(kuò)展模塊中封裝.這樣,Python解釋器就能通過這些接口訪問SiPESC平臺(tái)中的各功能插件,完成相應(yīng)的工作.SiPESC平臺(tái)采用統(tǒng)一的接口管理模式[8],其插件管理器類圖見圖插件管理器類用于管理系統(tǒng)中所有的插件,包括加載、卸載和查詢等操作.平臺(tái)啟動(dòng)時(shí)會(huì)首先調(diào)用initialize方法初始化插件管理器,創(chuàng)建全局的插件管理器對(duì)象.可以使用getManager方法獲得相應(yīng)的插件管理器對(duì)象,并通過注冊(cè)、加載和啟用擴(kuò)展等方法動(dòng)態(tài)地配置所需的平臺(tái)環(huán)境.平臺(tái)上具體的功能通過各個(gè)擴(kuò)展對(duì)象實(shí)現(xiàn),由功能擴(kuò)展管理器類創(chuàng)建并管理.

功能擴(kuò)展管理器類實(shí)現(xiàn)對(duì)各種插件中的功能擴(kuò)展的管理和查詢等功能.SiPESC平臺(tái)中功能擴(kuò)展管理器類圖見圖3.

getManager方法用于獲得一個(gè)全局功能擴(kuò)展管理器對(duì)象,由這個(gè)全局對(duì)象管理平臺(tái)上的各種功能,實(shí)現(xiàn)插件的調(diào)用與功能擴(kuò)展對(duì)象的創(chuàng)建等.createExtension方法用于創(chuàng)建一個(gè)指定名稱的功能擴(kuò)展對(duì)象.createExtensionCaller方法則只用于內(nèi)部使用,無須暴露給用戶.其他的方法均提供相應(yīng)的查詢功能,方便用戶獲取擴(kuò)展對(duì)象的具體信息.

2.2擴(kuò)展模塊中類的設(shè)計(jì)

根據(jù)對(duì)SiPESC平臺(tái)接口的分析,為實(shí)現(xiàn)使用Python腳本調(diào)用SiPESC平臺(tái)上的插件的功能,需要在擴(kuò)展模塊中封裝一個(gè)MExtensionManager類,向用戶提供通過腳本代碼對(duì)SiPESC平臺(tái)上的插件進(jìn)行查詢、管理和調(diào)用的功能.同時(shí),其能獲得所調(diào)用的插件中的功能擴(kuò)展對(duì)象,利用創(chuàng)建擴(kuò)展對(duì)象的方法創(chuàng)建相應(yīng)的功能擴(kuò)展對(duì)象,并可以訪問該對(duì)象的全部方法和屬性.

為更好地控制擴(kuò)展模塊中底層的數(shù)據(jù)處理和對(duì)象創(chuàng)建過程,不使用第三方擴(kuò)展工具,而是純粹利用Python/C API實(shí)現(xiàn)擴(kuò)展模塊的編寫.同時(shí),由于SiPESC平臺(tái)是基于Qt開發(fā)的,為能與SiPESC平臺(tái)插件管理器中的類型互相兼容,在編寫擴(kuò)展時(shí)大量地使用Qt庫中的類型.區(qū)別于傳統(tǒng)的Python擴(kuò)展模塊編寫方法,為實(shí)現(xiàn)動(dòng)態(tài)封裝機(jī)制,還需使用JIT(即時(shí)編譯)技術(shù).[910]

對(duì)于擴(kuò)展模塊中的MExtensionManager類,其接口與SiPESC平臺(tái)上的功能擴(kuò)展管理器類的接口基本一致,且返回值均為PyObject*類型(構(gòu)造函數(shù)除外).其實(shí)擴(kuò)展模塊只是將平臺(tái)的接口進(jìn)行二次封裝,具體實(shí)現(xiàn)時(shí)調(diào)用的仍是平臺(tái)上的方法.MExtensionManager類是擴(kuò)展模塊的一個(gè)靜態(tài)類,根據(jù)Python擴(kuò)展的規(guī)則,其所有的方法都必須是靜態(tài)的,而且只能有2個(gè)參數(shù),類型也只能是PyObject*.

3擴(kuò)展模塊的實(shí)現(xiàn)

3.1擴(kuò)展模塊的運(yùn)行流程

程序能否正確地實(shí)現(xiàn)所采用的理論和方法并正確地運(yùn)行,流程(框圖)設(shè)計(jì)是先導(dǎo)和關(guān)鍵.根據(jù)上文對(duì)基于SiPESC平臺(tái)的Python擴(kuò)展模塊的設(shè)計(jì),可以畫出該擴(kuò)展模塊在平臺(tái)上使用時(shí)的工作流程圖,見圖4.全局插件管理器對(duì)象的初始化與獲取在擴(kuò)展模塊的初始化函數(shù)中完成,其他步驟均通過函數(shù)的封裝實(shí)現(xiàn).流程圖中對(duì)功能擴(kuò)展類是否已注冊(cè)的查詢,可以防止重復(fù)注冊(cè)相同的功能擴(kuò)展類,提高運(yùn)行效率.

圖 4Python擴(kuò)展模塊的運(yùn)行流程

3.2PyObject與QVariant的類型轉(zhuǎn)換

在具體實(shí)現(xiàn)擴(kuò)展模塊中的類時(shí),Python對(duì)象與QVariant對(duì)象之間的類型轉(zhuǎn)換被反復(fù)地使用.前文已經(jīng)提到過,Python中所有方法的返回值都是PyObject*類型,其參數(shù)也必須是PyObject*類型,這些PyObject*指針都指向各自的Python對(duì)象.但是,SiPESC平臺(tái)上所有方法的返回值和參數(shù)均為QVariant類型,因此必須實(shí)現(xiàn)PyObject與QVariant之間的相互轉(zhuǎn)換.Python提供PyObject與C數(shù)據(jù)類型對(duì)象相互轉(zhuǎn)換的API,而QVariant與C數(shù)據(jù)類型對(duì)象之間的相互轉(zhuǎn)換也很容易實(shí)現(xiàn),這樣便能通過2次轉(zhuǎn)換實(shí)現(xiàn)PyObject與QVariant的轉(zhuǎn)換.

作為一種動(dòng)態(tài)語言,Python腳本語言中的變量在使用前不需要聲明、定義,其類型根據(jù)給變量所賦的值自動(dòng)判斷,可以大大地簡化從PyObject對(duì)象轉(zhuǎn)換成QVariant類型的過程.可以使用Python中判斷變量類型的API加上類型轉(zhuǎn)換函數(shù)自動(dòng)完成PyObject到QVariant的轉(zhuǎn)換,而無須知道PyObject在Python中屬于哪種類型.將PyObject轉(zhuǎn)換為QVariant的函數(shù)原型為endprint

QVariant PyObjToQVariant(PyObject* obj)

PyObject類型的指針指向需要轉(zhuǎn)換的Python對(duì)象,可以通過PyObject_TypeCheck接口判斷該對(duì)象在Python中表示的類型,之后調(diào)用相應(yīng)的Python類型轉(zhuǎn)換API(如PyInt_AS_LONG)將該對(duì)象轉(zhuǎn)換為C語言的數(shù)據(jù)類型,進(jìn)而轉(zhuǎn)化為QVariant類型.

同理,可以使用QVariant的內(nèi)置方法將其轉(zhuǎn)換為C數(shù)據(jù)類型,并調(diào)用相應(yīng)的API(如PyInt_FromLong)完成向PyObject類型的轉(zhuǎn)換.實(shí)現(xiàn)這個(gè)過程的函數(shù)原型為

PyObject* QVarToPyObj(const QVariant& val)

3.3MExtensionManager類的封裝

在擴(kuò)展模塊中,只有MExtensionManager類是靜態(tài)定義的,用于實(shí)現(xiàn)SiPESC平臺(tái)上的功能擴(kuò)展的加載和調(diào)用,其他功能擴(kuò)展類都通過MExtensionManager類在Python引擎上創(chuàng)建、注冊(cè)和調(diào)用.因此,在擴(kuò)展模塊中只實(shí)現(xiàn)MExtensionManager一個(gè)類,而該類的結(jié)構(gòu)與SiPESC平臺(tái)功能擴(kuò)展管理器類一致,擴(kuò)展模塊中的方法內(nèi)部調(diào)用的其實(shí)也是平臺(tái)上的方法.由SiPESC平臺(tái)插件管理器的接口可知,該類中大多數(shù)的方法都是用來進(jìn)行查詢的,對(duì)于這些類方法,實(shí)現(xiàn)很簡單,只需將從腳本獲得的參數(shù)轉(zhuǎn)換為QVariant類型,并傳給平臺(tái)調(diào)用功能擴(kuò)展管理器類的相應(yīng)方法,獲得返回值,然后將返回值轉(zhuǎn)換回PyObject*類型并輸出.

createExtension方法是MExtensionManager類中最關(guān)鍵的方法,其根據(jù)獲得的參數(shù)創(chuàng)建相應(yīng)的功能擴(kuò)展類對(duì)象.該方法在被調(diào)用時(shí)先查詢?cè)摴δ軘U(kuò)展類是否已在Python引擎中注冊(cè),若未注冊(cè),則先獲取功能擴(kuò)展類的信息對(duì)象(MextensionInfo對(duì)象),接著根據(jù)這個(gè)信息創(chuàng)建相應(yīng)的類(如果該類的父類未在Python引擎中注冊(cè),則會(huì)先創(chuàng)建父類),然后將創(chuàng)建的類注冊(cè)給Python,最后通過類的構(gòu)造函數(shù)創(chuàng)建對(duì)象并返回.同時(shí),創(chuàng)建的對(duì)象將會(huì)被存儲(chǔ)起來,供腳本調(diào)用.

使用createExtension方法創(chuàng)建Python的新類型時(shí),需要提供該類的方法列表,該方法列表為以下形式的結(jié)構(gòu)體:

ml_name為函數(shù)名,ml_meth為函數(shù)指針,ml_flags指示函數(shù)的調(diào)用方式,ml_doc則為函數(shù)說明.其中,由于動(dòng)態(tài)性的需求,ml_meth通過JIT技術(shù)在運(yùn)行時(shí)動(dòng)態(tài)獲得,而其他參數(shù)可根據(jù)對(duì)應(yīng)的MExtensionInfo對(duì)象確定.

3.4初始化函數(shù)的編寫

在完成MExtensionManager類的封裝之后,需要編寫擴(kuò)展模塊的初始化函數(shù).Python中創(chuàng)建一個(gè)模塊的API原型為

PyObject* Py_InitModule3(char *name, PyMethodDef *methods, char *doc)

Python根據(jù)模塊名name和模塊層的方法列表methods構(gòu)造一個(gè)新模塊并返回.如果參數(shù)doc不為空,則此處為模塊的一些信息.為向模塊中添加自定義類,還需要在模塊的初始化函數(shù)中使用添加自定義類的API,其原型為

int PyModule_AddObject(PyObject *module, const char *name, PyObject *value)

module為之前創(chuàng)建的模塊,name為自定義類的名字,value則是定義類在Python中的類對(duì)象的結(jié)構(gòu)體,包含自定義類的全部信息.因?yàn)楸緮U(kuò)展模塊的動(dòng)態(tài)特性,只有MExtensionManager類是在初始化時(shí)便添加到模塊中,其他類均在使用時(shí)根據(jù)需求動(dòng)態(tài)地添加,所以創(chuàng)建的模塊必須是一個(gè)全局的靜態(tài)變量,這樣在程序的每個(gè)地方,都能使用這個(gè)變量添加類.同時(shí),在初始化函數(shù)中還需調(diào)用SiPESC平臺(tái)中MPluginManager類的initialize方法完成平臺(tái)的初始化.

4應(yīng)用實(shí)例

為驗(yàn)證本文實(shí)現(xiàn)的擴(kuò)展模塊在驅(qū)動(dòng)SiPESC平臺(tái)復(fù)雜工作流程中的實(shí)用性及其與Python第三方庫的良好兼容性,考慮圖5所示的GARTEUR飛機(jī)模型的修正問題,通過優(yōu)化6個(gè)部位的彈性模量,使模型前9階振動(dòng)頻率與試驗(yàn)值的方差取最小值.

該算例通過SiPESC.OPT插件控制優(yōu)化流程,由ANSYS進(jìn)行頻率計(jì)算,并通過Python的二維畫圖庫Matplotlib實(shí)現(xiàn)迭代歷程的輸出,見圖6.整個(gè)優(yōu)化過程都通過Python的腳本代碼驅(qū)動(dòng),其中部分關(guān)鍵的語句如下:

5結(jié)論

基于SiPESC平臺(tái)的開放性設(shè)計(jì)并實(shí)現(xiàn)相應(yīng)的Python擴(kuò)展模塊.通過該擴(kuò)展模塊,可以使用腳本語言調(diào)用SiPESC中的插件實(shí)現(xiàn)數(shù)值計(jì)算和優(yōu)化分析等功能,并可集成Python的第三方庫,創(chuàng)建復(fù)雜工作流程.本文提出動(dòng)態(tài)封裝的思想,相對(duì)于傳統(tǒng)的靜態(tài)封裝方式,提高擴(kuò)展模塊的靈活性,節(jié)約開發(fā)時(shí)間.目前,該擴(kuò)展模塊的主要功能已基本完成,下一步工作將集中在完善動(dòng)態(tài)類型轉(zhuǎn)換機(jī)制以及大量復(fù)雜實(shí)例的測(cè)試上.

參考文獻(xiàn):

[1]PREZ F, GRANGER B E, HUNTER J D. Python: an ecosystem for scientific computing[J]. Comput Sci & Eng, 2011, 13(2): 1321.

[2]曹金鳳, 王旭春, 孔亮. Python語言在Abaqus中的應(yīng)用[M]. 北京: 機(jī)械工業(yè)出版社, 2011: 810.

[3]CHUN W J. Python 核心編程[M]. 宋吉廣, 譯. 2版. 北京: 人民郵電出版社, 2008: 47.endprint

[4]李勇, 王文強(qiáng). Python Web開發(fā)學(xué)習(xí)實(shí)錄[M]. 北京: 清華大學(xué)出版社, 2011: 2.

[5]van ROSSUM G. Extending and embedding Python, Release 2.7.7[EB/OL]. (20121029)[20130610]. https://docs.python.org/2.7/extending/index.html.

[6]BEAZLEY D M. Python: essential reference[M]. New Jersey: AddisonWesley, 2009: 591608.

[7]羅霄, 任勇, 山秀明. 基于 Python 的混合語言編程及其實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004, 21(12): 1718.

LUO Xuiao, REN Yong, SHAN Xiuming. Python based mixedlanguage programming and its implementation[J]. Comput Appl & Software, 2004, 21(12): 1718.

[8]張洪武, 陳飆松, 李云鵬, 等. 面向集成化CAE軟件開發(fā)的SiPESC研發(fā)工作進(jìn)展[J]. 計(jì)算機(jī)輔助工程, 2011, 20(2): 3949.

ZHANG Hongwu, CHEN Biaosong, LI Yunpeng, et al. Advancement of design and implementation of SiPESC for development of integrated CAE software systems[J]. Comput Aided Eng, 2011, 20(2): 3949.

[9]SUGANUMA T, OGASAWARA T, TAKEUCHI M, et al. Overview of the IBM Java justintime compiler[J]. IBM sys J, 2000, 39(1): 175193.

[10]閆偉, 谷建華. Java虛擬機(jī)即時(shí)編譯器的一種實(shí)現(xiàn)原理[J]. 微處理機(jī), 2007, 28(5): 5860.

YAN Wei, GU Jianhua. One of JIT compiler's implementation in JVM[J]. Microprocessors, 2007, 28(5): 5860.

(編輯武曉英)endprint

[4]李勇, 王文強(qiáng). Python Web開發(fā)學(xué)習(xí)實(shí)錄[M]. 北京: 清華大學(xué)出版社, 2011: 2.

[5]van ROSSUM G. Extending and embedding Python, Release 2.7.7[EB/OL]. (20121029)[20130610]. https://docs.python.org/2.7/extending/index.html.

[6]BEAZLEY D M. Python: essential reference[M]. New Jersey: AddisonWesley, 2009: 591608.

[7]羅霄, 任勇, 山秀明. 基于 Python 的混合語言編程及其實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004, 21(12): 1718.

LUO Xuiao, REN Yong, SHAN Xiuming. Python based mixedlanguage programming and its implementation[J]. Comput Appl & Software, 2004, 21(12): 1718.

[8]張洪武, 陳飆松, 李云鵬, 等. 面向集成化CAE軟件開發(fā)的SiPESC研發(fā)工作進(jìn)展[J]. 計(jì)算機(jī)輔助工程, 2011, 20(2): 3949.

ZHANG Hongwu, CHEN Biaosong, LI Yunpeng, et al. Advancement of design and implementation of SiPESC for development of integrated CAE software systems[J]. Comput Aided Eng, 2011, 20(2): 3949.

[9]SUGANUMA T, OGASAWARA T, TAKEUCHI M, et al. Overview of the IBM Java justintime compiler[J]. IBM sys J, 2000, 39(1): 175193.

[10]閆偉, 谷建華. Java虛擬機(jī)即時(shí)編譯器的一種實(shí)現(xiàn)原理[J]. 微處理機(jī), 2007, 28(5): 5860.

YAN Wei, GU Jianhua. One of JIT compiler's implementation in JVM[J]. Microprocessors, 2007, 28(5): 5860.

(編輯武曉英)endprint

[4]李勇, 王文強(qiáng). Python Web開發(fā)學(xué)習(xí)實(shí)錄[M]. 北京: 清華大學(xué)出版社, 2011: 2.

[5]van ROSSUM G. Extending and embedding Python, Release 2.7.7[EB/OL]. (20121029)[20130610]. https://docs.python.org/2.7/extending/index.html.

[6]BEAZLEY D M. Python: essential reference[M]. New Jersey: AddisonWesley, 2009: 591608.

[7]羅霄, 任勇, 山秀明. 基于 Python 的混合語言編程及其實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004, 21(12): 1718.

LUO Xuiao, REN Yong, SHAN Xiuming. Python based mixedlanguage programming and its implementation[J]. Comput Appl & Software, 2004, 21(12): 1718.

[8]張洪武, 陳飆松, 李云鵬, 等. 面向集成化CAE軟件開發(fā)的SiPESC研發(fā)工作進(jìn)展[J]. 計(jì)算機(jī)輔助工程, 2011, 20(2): 3949.

ZHANG Hongwu, CHEN Biaosong, LI Yunpeng, et al. Advancement of design and implementation of SiPESC for development of integrated CAE software systems[J]. Comput Aided Eng, 2011, 20(2): 3949.

[9]SUGANUMA T, OGASAWARA T, TAKEUCHI M, et al. Overview of the IBM Java justintime compiler[J]. IBM sys J, 2000, 39(1): 175193.

[10]閆偉, 谷建華. Java虛擬機(jī)即時(shí)編譯器的一種實(shí)現(xiàn)原理[J]. 微處理機(jī), 2007, 28(5): 5860.

YAN Wei, GU Jianhua. One of JIT compiler's implementation in JVM[J]. Microprocessors, 2007, 28(5): 5860.

(編輯武曉英)endprint