日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
人生苦短我用Python[0x01]動(dòng)態(tài)加載模塊

背景

創(chuàng)新互聯(lián)公司自2013年起,先為通道等服務(wù)建站,通道等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為通道企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

程序模塊化是軟件工程里面一個(gè)常見(jiàn)的設(shè)計(jì)思想,在軟件開(kāi)發(fā)也比較常見(jiàn),可以把代碼解耦,特別是在面對(duì)多人同時(shí)開(kāi)發(fā)或者需要經(jīng)常變動(dòng)升級(jí)。我們使用windows常見(jiàn)的dll就是模塊化的一個(gè)例子,一個(gè)軟件升級(jí)功能,可能就只需要升級(jí)一些dll文件就可以了,主題程序不用改動(dòng),又比如一些新功能可以用模塊的方式加載等,不僅有利于開(kāi)發(fā)者還方便了使用者。

python的動(dòng)態(tài)加載模塊

在python里面,導(dǎo)入一個(gè)模塊使用的是

 
 
 
 
  1. import 模塊名 

python會(huì)在sys.path里面尋找匹配名稱的文件(py, pyo, pyc, pyd, so, dll)等文件,我們可以在python里面打印sys.path是些什么目錄

 
 
 
 
  1. import sys 
  2. sys.path 
  3. #返回下面內(nèi)容 
  4. ['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'] 

在代碼運(yùn)行目錄下的文件名也可以作為模塊名導(dǎo)入,比如當(dāng)前目錄下有一個(gè)名字叫tools.py的文件,直接在代碼里面import這個(gè)文件名導(dǎo)入。import之后的模塊會(huì)保存在sys.modules里面

我們可以看到我們剛才加載的tools.py

但是import只能夠加載固定名稱模塊,不能加載動(dòng)態(tài)比如字符串名稱模塊,比如

 
 
 
 
  1. str = 'tools' 
  2. import str 
  3. #提示錯(cuò)誤 
  4. Traceback (most recent call last): 
  5.   File "", line 1, in  
  6. ImportError: No module named str 

這個(gè)時(shí)候,我們需要用到__import__,這是一個(gè)python的內(nèi)置函數(shù),import底層其實(shí)也是使用了這個(gè)函數(shù)加載模塊的,我們可以看看

 
 
 
 
  1. __import__ 
  2. #返回 
  3.  
  4. str = 'tools' 
  5. __import__(str) 
  6. #返回加載tools.py成功 

好了,現(xiàn)在解決了動(dòng)態(tài)加載隨意模塊的問(wèn)題了,但是距離成功還有一步之遙,在python里面,加載模塊是有緩存的,意思就是說(shuō),加載tools.py之后,就算tools.py內(nèi)容發(fā)生改變了,都不會(huì)重新加載,還是無(wú)法滿足我們實(shí)時(shí)更新加載模塊的需求。這里有個(gè)比較簡(jiǎn)單的辦法,可以使得模塊有需要的時(shí)候重新加載,回想之前我們說(shuō)過(guò),python加載后的模塊都回保存在sys.modules里面,我們只需要再重新加載模塊之前,把模塊從sys.modules里面刪除即可。

 
 
 
 
  1. del sys.modules['tools'] 
  2. __import__('tools') 

使用python這樣的特性,我們寫代碼的時(shí)候,就可以把經(jīng)常需要變動(dòng)的剝離出來(lái)成為一個(gè)python模塊,需要的時(shí)候動(dòng)態(tài)更新然后重新加載到主程序里面,可以***實(shí)現(xiàn)不中斷服務(wù)升級(jí)。

【本文是專欄機(jī)構(gòu)作者“睿江云EflyCloud”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】


新聞標(biāo)題:人生苦短我用Python[0x01]動(dòng)態(tài)加載模塊
瀏覽地址:http://www.dlmjj.cn/article/djhhpic.html