当python命令行没有处理非常大的输入时,为什么python idle会变得这么慢?
例如,如果我在python IDLE中运行“aman”* 10000000,它会变得无响应,但在python cmd行上,它很快。
答案 0 :(得分:2)
我不得不研究一下。当我在我的机器上调用idle时,我看到了另一个使用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)。环境 也可以从Shell窗口重新启动,而无需重新启动IDLE。
<强>结论强>
当我们有这样的依赖(IDLE取决于套接字上的响应)时,你所经历的延迟就完全没问了。