summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamian Johnson <atagar@torproject.org>2019-03-01 11:13:10 -0800
committerDamian Johnson <atagar@torproject.org>2019-03-01 16:25:10 -0800
commit0fc61ddb1df72762d1e833c3977c4dd8e9c06617 (patch)
treedbde203f22fa7efc2b4b3669c5970a6ae98167d6
parent2cd7bff3bf00550fbed88472c2f67b3e04c5d54a (diff)
Skip autocompletion for non-interactive interpreter
Sadly I forget where it was pointed out, but invoking the control port via shell is a *lot* faster than stem... #!/bin/bash -e cmd="$@" pass="ControlPortPassword" function test_tor() { echo "$1" >&3 sed "/^250 OK\r$/q" <&3 echo QUIT >&3 exec 3<&- } exec 3<>/dev/tcp/127.0.0.1/9051 echo AUTHENTICATE \"$pass\" >&3 read -u 3 test_tor "$cmd" ==================== atagar@morrigan:~$ time ./bench.sh 'GETINFO version' 1>/dev/null real 0m0.007s user 0m0.004s sys 0m0.003s ==================== atagar@morrigan:~$ time tor-prompt --run 'GETINFO version' 1>/dev/null real 0m0.186s user 0m0.072s sys 0m0.030s Generally speaking this is expected. Spinning up an interpreter takes time. But in doing a quick investigation realized this is quite a bit slower than it needs to be... total tor-prompt runtime 0.186 seconds -------------------------------------------------------- python interpreter startup 0.016 seconds (9%) import statements 0.079 seconds (42%) check if tor is running 0.014 seconds (8%) connect to tor 0.009 seconds (5%) autocompete setup 0.065 seconds (34%) invoke tor controller command 0.003 seconds (2%) Autocompletion is only relevant when the user is presented with an interactive interpreter. If we're merely invoking a command it's pointless. So TL;DR: tor-prompt is now ~34% faster when used to invoke controller commands.
-rw-r--r--docs/change_log.rst4
-rw-r--r--stem/interpreter/__init__.py10
2 files changed, 9 insertions, 5 deletions
diff --git a/docs/change_log.rst b/docs/change_log.rst
index edf574c3..21b6c85e 100644
--- a/docs/change_log.rst
+++ b/docs/change_log.rst
@@ -77,6 +77,10 @@ The following are only available within Stem's `git repository
* Added NetBSD to our `download page <download.html>`_
+ * **Interpreter**
+
+ * tor-prompt is now ~34% faster when used to non-interactively invoke commands
+
.. _version_1.7:
Version 1.7 (October 7th, 2018)
diff --git a/stem/interpreter/__init__.py b/stem/interpreter/__init__.py
index b10109e8..a4911a65 100644
--- a/stem/interpreter/__init__.py
+++ b/stem/interpreter/__init__.py
@@ -118,11 +118,6 @@ def main():
sys.exit(1)
with controller:
- autocompleter = stem.interpreter.autocomplete.Autocompleter(controller)
- readline.parse_and_bind('tab: complete')
- readline.set_completer(autocompleter.complete)
- readline.set_completer_delims('\n')
-
interpreter = stem.interpreter.commands.ControlInterpreter(controller)
showed_close_confirmation = False
@@ -158,6 +153,11 @@ def main():
sys.exit(1)
else:
+ autocompleter = stem.interpreter.autocomplete.Autocompleter(controller)
+ readline.parse_and_bind('tab: complete')
+ readline.set_completer(autocompleter.complete)
+ readline.set_completer_delims('\n')
+
for line in msg('msg.startup_banner').splitlines():
line_format = HEADER_BOLD_OUTPUT if line.startswith(' ') else HEADER_OUTPUT
print(format(line, *line_format))