1. 程式人生 > >python執行中修改程式碼importlib過載模組

python執行中修改程式碼importlib過載模組

無聊測試了下,發現:

1.python只import模組一次,在import某個模組後就存在記憶體中,此時修改該模組沒有用

2.python3提供 importlib模組,reload方法重新載入模組.

3.但是該reload方法有延遲,似乎並不會等reload完畢,直接會繼續執行

4.在reload後加延遲,起到預期效果,兩個py互相呼叫和修改

test2.py:

import test1
import importlib
import time

def modify(ii):
    with open('test1.py','r') as f_r:
        lines = f_r.readlines()
    with open('test1.py','w') as f_w:
        i = 1
        for line in lines:
            if i == 19:
                num = int(line)+ii
                line = '\t\t'+str(num)+'\n'
            i = i+1
            f_w.write(line)
            
def f2():
    i2= \
        1
    print('i2 =',i2)
    modify(i2)
    importlib.reload(test1)
    time.sleep(0.2)
    if i2<10000:
        test1.f1()
    
if __name__=='__main__':
    f2()
    print("test2 end")
 

test1.py:

import test2
import importlib
import time

def modify(ii):
    with open('test2.py','r') as f_r:
        lines = f_r.readlines()
    with open('test2.py','w') as f_w:
        i = 1
        for line in lines:
            if i == 19:
                num = int(line)+ii
                line = '\t\t'+str(num)+'\n'
            i = i+1
            f_w.write(line)
            
def f1():
    i1=  \
        2
    print('i1 =',i1)
    modify(i1)
    importlib.reload(test2)
    time.sleep(0.2)
    if i1<10000:
        test2.f2()
    
if __name__=='__main__':
    f1()
    print("test1 end")