Python のコマンド ラインでは処理できないのに、非常に大きな入力を処理すると、Python のアイドル状態が非常に遅くなるのはなぜですか?
たとえば、python IDLE で "aman"*10000000 を実行すると応答しなくなりますが、python cmd ラインでは高速です。
Python のコマンド ラインでは処理できないのに、非常に大きな入力を処理すると、Python のアイドル状態が非常に遅くなるのはなぜですか?
たとえば、python IDLE で "aman"*10000000 を実行すると応答しなくなりますが、python cmd ラインでは高速です。
少し研究する必要がありました。自分のマシンでアイドル状態を呼び出したとき、使用する別の python プロセスを見ましたidlelib
~$ ps -eaf | grep -in idle
234:1000 13122 1 5 16:44 ? 00:00:01 /usr/bin/python2.7 /usr/bin/idle-python2.7
235:1000 13124 13122 3 16:44 ? 00:00:01 /usr/bin/python2.7 -c __import__('idlelib.run').run.main(True) 60839
239:1000 13146 12061 0 16:44 pts/0 00:00:00 grep --color=auto -in idle
~$
最後のパラメーター (60839) は考えさせられました。だから私は周りを見て、idlelib
ここで実装を得ましたhttps://github.com/pypy/pypy/blob/master/lib-python/2.7/idlelib/run.py#L49そこのコメントは言う
Start the Python execution server in a subprocess
In the Python subprocess, RPCServer is instantiated with handlerclass
MyHandler, which inherits register/unregister methods from RPCHandler via
the mix-in class SocketIO.
さて、物事は私には明らかでした。IDLE は、TCP 接続を介してコマンドを Python インタープリターに送信します。それでも、私は確信が持てません。Help
次に、完全な-> About IDLE
->を読みましたREADME
。それは言う
IDLE は別のプロセスで Python コードを実行します。このプロセスは、エディター ウィンドウから実行 (F5) を開始するたびに再開されます。IDLE を再起動せずに、シェル ウィンドウから環境を再起動することもできます。
結論
このような依存関係 (ソケット経由の応答に依存する IDLE) がある場合、経験した遅延はまったく問題ありません。