【发布时间】:2014-11-24 20:21:01
【问题描述】:
我正在尝试的代码是:
def update_vm(si, vm):
env.host_string = vm
with settings(user=VM_USER, key_filename=inputs['ssh_key_path']):
put(local_file, remote_zip_file)
run('tar -zxpf %s' % remote_zip_file)
run('sudo sh %s' % REMOTE_UPDATE_SCRIPT)
response_msg = run('cat %s' % REMOTE_RESPONSE_FILE)
if 'success' in response_msg:
#do stuff
else:
#do stuff
def update_vm_wrapper(args):
return update_vm(*args)
def main():
try:
si = get_connection()
vms = [vm1, vm2, vm3...]
update_jobs = [(si, vm) for vm in vms]
pool = Pool(30)
pool.map(update_vm_wrapper, update_jobs)
pool.close()
pool.join()
except Exception as e:
print e
if __name__ == "__main__":
main()
现在的问题是我看到它试图将 zip 文件放在同一个 vm(比如 vm1)中 3 次(我猜是 vms 的长度)。并尝试执行其他 ssh 命令 3 次。
对 update_vm() 方法使用锁可以解决问题。但它看起来不再是多处理器解决方案。它更像是遍历一个循环。
我在这里做错了什么?
【问题讨论】:
-
你从哪里得到
env? -
这是 ssh 操作的结构库