以下の複製コードを参照してください。
メモリリークを追跡すると、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)