为什么 python idle 在处理非常大的输入时变得如此缓慢,而 python 命令行却没有?
例如,如果我在 python IDLE 中运行“aman”*10000000,它会变得无响应,但在 python cmd 行上,它很快。
为什么 python idle 在处理非常大的输入时变得如此缓慢,而 python 命令行却没有?
例如,如果我在 python IDLE 中运行“aman”*10000000,它会变得无响应,但在 python cmd 行上,它很快。
我不得不研究一下。当我在我的机器上调用 idle 时,我看到另一个 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 代码,每次从编辑器窗口启动的 Run (F5) 都会重新启动该进程。环境也可以从 Shell 窗口重新启动,而无需重新启动 IDLE。
结论
当我们有这样的依赖关系时(IDLE 取决于通过套接字的响应),您所经历的延迟非常好。