等待远程服务器上的进程完成,使用Fabric。

3

设置

我正在使用Fabric在远程服务器上启动一个进程。我的本地服务器执行一个Python文件,按照以下顺序运行三个函数:第一个和第三个在本地服务器上运行,第二个在远程服务器上运行。

local_file.py

local_function_1()
remote_function()
local_function_2()

远程函数是在本地fabfile中指定的函数,如下所示。

fabfile.py

from fabric.api import *
@hosts(remote_server)
def remote_function():
    run('python function_on_remote_server.py')

问题

local_function_2 应该在 remote_function 运行完成后运行,但我不知道如何实现。

我考虑过两种方法:(1) 在 local_function_2 运行前等待固定的秒数,和 (2) 添加一个中间函数,在运行 local_function_2 之前检查是否存在来自 remote_function 的某些输出。

如何延迟本地服务器上函数的执行,直到远程服务器上的函数运行完成?


据我从文档(http://docs.fabfile.org/en/1.10/tutorial.html#organize-it-your-way)中了解到,这是fabric的默认行为: "Fabric检查通过操作调用的程序的返回值,并在它们没有干净地退出时中止。" - boardrider
1个回答

4

一种方法是改变您调用remote_function的方式,使用Fabric的execute代替。

from fabric.api import execute

local_function_1()
execute(remote_function)
local_function_2()

执行应该阻塞,直到任务完成。

更多信息请参见使用execute智能执行任务


1
这太完美了,正是我想要的。谢谢!很高兴这可以在 Fabric 中完成。 - Gyan Veda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接