2

Python のコマンド ラインでは処理できないのに、非常に大きな入力を処理すると、Python のアイドル状態が非常に遅くなるのはなぜですか?

たとえば、python IDLE で "aman"*10000000 を実行すると応答しなくなりますが、python cmd ラインでは高速です。

4

1 に答える 1

2

少し研究する必要がありました。自分のマシンでアイドル状態を呼び出したとき、使用する別の 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) がある場合、経験した遅延はまったく問題ありません。

于 2013-08-16T11:21:25.880 に答える