以下の複製コードを参照してください。
メモリリークを追跡すると、reload(module)がすぐに有効にならないことがわかりました。
以下のプログラムは0,1,2,3,4を出力するはずですが、高速で実行すると、0,0,0,3,3などのシーケンスを出力します。sleep()関数の時間をたとえば1秒に増やすと、これが修正されるようです。
このコードは、問題を再現するためだけに、より実用的なコードを要約したものであることに注意してください。実際のアプリの状況に対処する必要があります。
安定性を確保する方法を知っている人はいますか?
私はWindows、cpython2732ビットを使用しています。
これを読んでくれてありがとう。
#このプログラムは、フォルダlib \ mymoduleが存在し、__init__。pyが含まれていることを前提としています
インポート時間
import io
gcをインポートする
modulefile ='c:\\ python27 \\ lib \\ mymodule \\ simplemodule.py'
range(5)のcntの場合:
modulecode = "" "def runmodule():
%iを返す
"" "%(cnt)
obj = io.open(modulefile、u'wb')
obj.write(modulecode)
obj.close()
cnt == 0の場合:
mymodule.simplemoduleをインポートします
そうしないと:
リロード(mymodule.simplemodule)
gc.collect()
mymodule.simplemodule.runmodule()を出力します
time.sleep(0.05)