ich eine einfache fabfile mit dem Namen haben env_fabfile.pyStoff env.hosts nicht identifiziert
# env_fabfile.py
# makes use of fab env variables
from fabric.api import env, run
def login():
env.hosts = ['[email protected]:1234', '[email protected]:2345']
env.passwords = {'[email protected]:1234': 'pass1', '[email protected]:2345': 'pass2'}
env.parallel=True
def run_lsb_release():
run('lsb_release -a')
Jetzt laufe ich die oben die Fab-Befehl wie:
fab -f env_fabfile.py login run_lsb_release
Und es läuft perfekt (parallel) und liefert die gewünschte Ausgabe
Jetzt wollte ich eigentlich den Zeitunterschied zwischen wh berechnen de Das gleiche Skript wird in serial vs ausgeführt, wenn es parallel ausgeführt wird. Also, dies zu tun, schrieb ich den folgenden Python-Skript: timecal.py
# timecal.py
# runs the fabfile once in serial and calculates the time
# then runs the same file in parallel and calculates the time
from fabric.api import env, run
import time
def login():
print "in login"
env.hosts = ['[email protected]:1234', '[email protected]:2345']
env.passwords = {'[email protected]:1234': 'pass1', '[email protected]:2345': 'pass2'}
def parallel(status):
print "in parallel"
env.parallel=status
def run_lsb_release():
print "in run"
run('lsb_release -a')
def do_serial():
start_time = time.time()
parallel(False)
login()
run_lsb_release()
elapsed_time = time.time() - start_time
return elapsed_time
def do_parallel():
start_time = time.time()
parallel(True)
login()
run_lsb_release()
elapsed_time = time.time() - start_time
return elapsed_time
if __name__ == '__main__':
print "Running in serial mode "
print "Total time taken ", do_serial()
print "Running in parallel mode"
print "Total time taken ", do_parallel()
aber wenn ich laufe timecal.py als
python timecal.py
bekomme ich die unten auf stdout (abgesehen von dem Druck Aussagen im Code)
No hosts found. Please specify (single) host string for connection:
Ich verstehe nicht warum? Auch, wie kann das Skript behoben werden, so dass ich das erreichen, was ich will (wie in der Frage oben)
Bei dem Versuch, eine andere Version von timecal.py, wie:
from fabric.api import run, settings, env
import time
def do_parallel():
start_time = time.time()
env.hosts = ['[email protected]:1234', '[email protected]:2345']
env.passwords = {'[email protected]:1234': 'pass1', '[email protected]:2345': 'pass2'}
env.parallel=True
run('lsb_release -a')
elapsed_time = time.time() - start_time
return elapsed_time
def do_serial():
start_time = time.time()
with settings(host_string='host1', port=1234, user='user', password='pass1'):
run('lsb_release -a')
with settings(host_string='host2', port=2345, user='user', password='pass2'):
run('lsb_release -a')
elapsed_time = time.time() - start_time
return elapsed_time
if __name__ == '__main__':
try:
print "Running in parallel mode"
print "Total time taken ", do_parallel()
print "Running in serial mode "
print "Total time taken ", do_serial()
except Exception as e:
print e
I holen Sie sich die folgenden Fehler:
Fatal error: Needed to prompt for the target host connection string (host: None), but input would be ambiguous in parallel mode
ich verstehe nicht, warum ist der Gastgeber: None hier? Was ist falsch an dem Code?