摘? 要:Python是比較熱門的一種編程語(yǔ)言,搭建Python的在線實(shí)驗(yàn)平臺(tái)可以讓學(xué)生隨時(shí)隨地開(kāi)展編程實(shí)驗(yàn),滿足當(dāng)前的學(xué)習(xí)需求。實(shí)驗(yàn)系統(tǒng)的性能是系統(tǒng)可用性的一個(gè)瓶頸,文章使用jupyter notebook創(chuàng)建了基礎(chǔ)實(shí)驗(yàn)?zāi)K,然后使用框架頁(yè)面之間的通信與調(diào)用來(lái)優(yōu)化實(shí)驗(yàn)平臺(tái),最后通過(guò)實(shí)驗(yàn)驗(yàn)證了平臺(tái)的性能。證實(shí)該實(shí)驗(yàn)平臺(tái)能夠適用于多用戶、高頻率、高負(fù)載的環(huán)境。
關(guān)鍵詞:Python;在線實(shí)驗(yàn);性能優(yōu)化;頁(yè)面通信
中圖分類號(hào):TP311.5 ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-4706(2022)01-0011-03
Abstract: Python is a relatively popular programming language. Building an online experimental platform for Python can allow students to carry out programming experiments anytime, anywhere to meet their current learning needs. The performance of the experimental system is a bottleneck of system availability. The paper uses jupyter notebook to create a basic experimental module, and then uses the communication and call between the framework pages to optimize the experimental platform. Finally, the performance of the platform is verified by experiments. It is confirmed that the experimental platform is suitable for multi-user, high frequency and high load environment.
Keywords: Python; online experiment; performance optimization; page communication
0? 引? 言
Python是目前比較熱門的一種編程語(yǔ)言,在人工智能、數(shù)據(jù)分析、網(wǎng)絡(luò)管理等方面有廣泛的應(yīng)用[1]。Python是在1989年由Guido van Rossum設(shè)計(jì)開(kāi)發(fā)的,本身由其他語(yǔ)言發(fā)展而來(lái),包括C、C++、ABC、Modula-3、Unix shell和一些腳本語(yǔ)言。因此它所寫的腳本能夠和其他大部分語(yǔ)言一起使用,例如C、C++、Java、JavaScript,所以說(shuō)它是一種編程語(yǔ)言的膠水[2]。Python是一種解釋性語(yǔ)言,沒(méi)有編譯環(huán)節(jié),它提供了豐富的基礎(chǔ)庫(kù),并且第三方庫(kù)也非常多,所以非常適合初學(xué)者[3]。
因此,目前對(duì)于Python語(yǔ)言的學(xué)習(xí)有比較高的需求,例如高校的計(jì)算機(jī)語(yǔ)言課程、社會(huì)上的計(jì)算機(jī)職業(yè)技能培訓(xùn)大都選擇Python。一些地方甚至還把Python語(yǔ)言作為信息技術(shù)中學(xué)考試科目[4]。
Python是實(shí)踐性很強(qiáng)的課程,純粹的理論課堂授課效果并不理想,需要安排充足的實(shí)驗(yàn)練習(xí)。由于傳統(tǒng)的實(shí)驗(yàn)室機(jī)房練習(xí)受到時(shí)間地點(diǎn)的約束,而現(xiàn)在手機(jī)等智能通訊工具的普及,使用在線Python實(shí)驗(yàn)系統(tǒng)更加能滿足學(xué)習(xí)需求[5]。
文章重點(diǎn)研究如何優(yōu)化實(shí)驗(yàn)平臺(tái)的性能。因?yàn)殡S著用戶數(shù)量的增加以及編程實(shí)驗(yàn)任務(wù)量的增加,實(shí)驗(yàn)平臺(tái)的性能下降。用戶等待時(shí)間逐漸變長(zhǎng),會(huì)嚴(yán)重影響學(xué)習(xí)的效果。
Python在線實(shí)驗(yàn)平臺(tái)的性能優(yōu)化,對(duì)于當(dāng)前的Python課程學(xué)習(xí)提供了較好的解決方案,適用于碎片化的學(xué)習(xí)方式[6]。另外我國(guó)的教育資源分布十分不均衡,發(fā)達(dá)地區(qū)的教育資源較多,通過(guò)這種在線Python在線實(shí)驗(yàn)平臺(tái)將這些資源共享到供欠發(fā)達(dá)地區(qū)具有較好的社會(huì)意義。
1? Python基礎(chǔ)實(shí)驗(yàn)?zāi)K
一個(gè)完整的Python在線實(shí)驗(yàn)系統(tǒng)包含有理論模塊、實(shí)驗(yàn)?zāi)K、交流模塊。其中最重要的是在線實(shí)驗(yàn)?zāi)K。本文研究的重點(diǎn)是如何提高在線實(shí)驗(yàn)編程系統(tǒng)的性能。
1.1? 基礎(chǔ)實(shí)驗(yàn)?zāi)K的搭建
Python基礎(chǔ)實(shí)驗(yàn)?zāi)K使用jupyter notebook搭建。jupyter notebook是一種交互式筆記本,能夠支持多種編程語(yǔ)言,其中就包括Python。它通過(guò)webservice的方式提供用戶使用。所以可以實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)。Python基礎(chǔ)實(shí)驗(yàn)?zāi)K的配置如下:
(1)在Linux下安裝 Anaconda,默認(rèn)會(huì)安裝jupyter notebook和一些常用的python開(kāi)發(fā)包。
(2)命令模式下運(yùn)行jupyter notebook,打開(kāi)瀏覽器的訪問(wèn)界面,確認(rèn)jupyter notebook安裝成功。
(3)安裝Python課程學(xué)習(xí)所需要的其他第三方包,例如wordcloud等。
(4)生成jupyter配置文件,命令:jupyter notebook --generate-config,然后就生成配置文件jupyter_notebook_config.py
(5)設(shè)置遠(yuǎn)程訪問(wèn)jupyter notebook的密碼。為了安全性,需要設(shè)置訪問(wèn)密碼,然后將這個(gè)密碼的哈希算法sha1的值放到配置文件。計(jì)算sha1的方法有很多選擇,可以使用在線工具或者是使用notebook.auth包的passwd()函數(shù)。
(6)修改配置文件。打開(kāi)配置文件jupyter_notebook_config.py。修改如下部分:
NotebookApp.ip=’服務(wù)器的遠(yuǎn)程訪問(wèn)IP地址’ #可以用*表示任意地址
NotebookApp.password = u’密碼的sha1值 ‘
本例中的具體設(shè)置為:
NotebookApp.ip=’218.92.23.106’
NotebookApp.password = u’ sha1:f8f7eaadda8c:3f83193252bdac9e9f60b6920f5f02ae7dd03ca9’
(7)用戶遠(yuǎn)程訪問(wèn),在瀏覽器中打開(kāi)網(wǎng)址http://218.92.23.106:8888。輸入密碼就可以正常使用jupyter notebook進(jìn)行Python編程練習(xí),如圖1所示。
1.2? 基礎(chǔ)實(shí)驗(yàn)?zāi)K的缺陷
隨著用戶數(shù)量的增加以及編程實(shí)驗(yàn)任務(wù)量的增加,實(shí)驗(yàn)平臺(tái)的性能下降。用戶等待時(shí)間逐漸變長(zhǎng),會(huì)嚴(yán)重影響學(xué)習(xí)的效果。所以需要優(yōu)化在線實(shí)驗(yàn)系統(tǒng),合理使用服務(wù)器資源,提高運(yùn)行的速度。
2? Python實(shí)驗(yàn)系統(tǒng)性能優(yōu)化
優(yōu)化系統(tǒng)的工作過(guò)程如圖2所示。
具體的實(shí)現(xiàn)要點(diǎn)有:
(1)框架網(wǎng)頁(yè)必須和三個(gè)服務(wù)器使用相同的主域名,這樣可以解決跨域訪問(wèn)的問(wèn)題。例如框架網(wǎng)頁(yè)使用www.dm.com,服務(wù)器分別使用jn1.dm.com、jn2.dm.com、jn3.dm.com。
(2)創(chuàng)建框架網(wǎng)頁(yè)文件,使用<iframe>包含最優(yōu)服務(wù)器的juypter notebook默認(rèn)首頁(yè),例如http:// jn2.dm.com:8888。
(3)框架網(wǎng)頁(yè)和Iframe之間的信息傳遞使用postMessage方法。
發(fā)送信息:
Iframe.contentWindow.postMessage(‘message’, ‘ Iframe _URL’)
接受信息:
window.addEventListener(‘message’, function (event) {
……
}
(4)為了獲取每個(gè)服務(wù)器的狀態(tài),在每個(gè)服務(wù)器端放置一個(gè)10萬(wàn)次累加的計(jì)算程序,該程序可以返回計(jì)算所用時(shí)間。通過(guò)框架網(wǎng)頁(yè)Ajax調(diào)用這個(gè)文件,就可以獲得所有服務(wù)器的當(dāng)前狀態(tài)。
(5)為了避免頻繁更換服務(wù)器,如果當(dāng)前服務(wù)器和最優(yōu)服務(wù)器之間性能差別在20%以內(nèi),則在當(dāng)前服務(wù)器執(zhí)行任務(wù);否則選擇運(yùn)算時(shí)間最短的服務(wù)器為用戶的當(dāng)前服務(wù)器,并執(zhí)行任務(wù)。
(6)為了能夠?qū)⒏缚蚣芪募氖髽?biāo)事件專遞到iframe中的用戶文件,以及獲取用戶文件的運(yùn)行狀態(tài),需要修改juypter notebook的模板文件,添加JS代碼。模板文件為notebook/templates/notebook.htm
例如“運(yùn)行”菜單的單擊事件的傳遞:
$(‘#run_cell’).click();
單元格輸出結(jié)果的獲?。?/p>
$(“#notebook div[class ~=’selected’]
.output_wrapper.output .output_text pre”).text()
(7)新建工具欄代替juypter notebook原始的工具欄,如圖3所示。首先,隱藏juypter notebook中原來(lái)的菜單,通過(guò)修改notebook.html模板完成,將ID為”menubar-container”的DIV設(shè)置為display:none。然后在框架網(wǎng)頁(yè)中創(chuàng)建工具欄實(shí)現(xiàn)對(duì)juypter notebook的操作。當(dāng)用戶單擊工具欄“運(yùn)行”按鈕時(shí),會(huì)首先選擇最優(yōu)服務(wù)器,然后運(yùn)行文件。
系統(tǒng)執(zhí)行的流程圖如圖4所示。
3? 實(shí)驗(yàn)與性能分析
實(shí)驗(yàn)環(huán)境為6臺(tái)服務(wù)器,6臺(tái)客戶機(jī)。6臺(tái)服務(wù)器的配置是CPU :2核;內(nèi)存:8G;帶寬:10M;操作系統(tǒng)Windows Server 2008 R2 64位企業(yè)版??蛻魴C(jī)使用CPU為Intel core i5-6200U 2.3 GHz、內(nèi)存為8 GB、500 GB硬盤,操作系統(tǒng)是Windows10。瀏覽器使用chrome,版本為89.0.4389.82。
測(cè)試方法:在瀏覽器端使用JavaScript調(diào)用并執(zhí)行相關(guān)的Python程序,然后獲取執(zhí)行時(shí)間,如圖5所示。調(diào)用程序時(shí)按照設(shè)定的頻率循環(huán)執(zhí)行。
通過(guò)實(shí)驗(yàn)驗(yàn)證,優(yōu)化后的實(shí)驗(yàn)平臺(tái)性能有了非常大幅的提高。
4? 結(jié)? 論
Python是目前較為熱門的計(jì)算機(jī)編程語(yǔ)言,社會(huì)上有較高的學(xué)習(xí)需求。學(xué)習(xí)好Python語(yǔ)言,編程實(shí)驗(yàn)是非常重要的環(huán)節(jié)。為了讓學(xué)生隨時(shí)隨地可以開(kāi)展編程實(shí)驗(yàn),搭建在線實(shí)驗(yàn)平臺(tái)是一種較好的解決方案。通過(guò)框架頁(yè)面之間的通信與調(diào)用來(lái)優(yōu)化Python在線實(shí)驗(yàn)平臺(tái),具有較好的性能,能夠適用于多用戶、高頻率、高負(fù)載的環(huán)境。最后通過(guò)實(shí)驗(yàn)證明了這一模型的優(yōu)越性。
參考文獻(xiàn):
[1] 陶倩,趙振宇,舒海燕,等.PYTHON在氣象業(yè)務(wù)平臺(tái)的應(yīng)用 [J].新農(nóng)業(yè),2022(2):85-86.
[2] 丁文浩,朱齊亮.基于Python的招聘數(shù)據(jù)爬取與分析 [J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2022(1):43-45.
[3] 韋依洋,吳一凡,李永遠(yuǎn).Python技術(shù)在數(shù)據(jù)可視化中的應(yīng)用研究 [J].福建電腦,2022,38(1):27-31.
[4] 郝靜,平夢(mèng)婷,陳建文,等.基于Python語(yǔ)言的科學(xué)計(jì)算課程教學(xué)改革研究 [J].計(jì)算機(jī)時(shí)代,2022(1):90-92+96.
[5]秦維超,戴曉芬.Python編程學(xué)習(xí)中巧用開(kāi)源硬件提升問(wèn)題解決能力 [J].中國(guó)信息技術(shù)教育,2022(1):62-63.
[6] 王佳莉.面向計(jì)算思維培養(yǎng)的智慧課堂教學(xué)模式構(gòu)建——以初中Python教學(xué)為例 [J].中國(guó)現(xiàn)代教育裝備,2021(24):20-23.
作者簡(jiǎn)介:何洪磊(1974—),男,漢族,江蘇連云港人,副教授,碩士,研究方向:軟件工程、人工智能。