fabric 运行分叉

2 投票
1 回答
1582 浏览
提问于 2025-04-16 17:11

我想用 Fabric.api.run 在远程机器上直接启动一个应用程序。因为这个应用程序运行得非常慢,我希望能创建一个子进程,这样我就不用一直等着了。

代码大概是这样的:

from fabric.api import run
....

run("python ./myApp.py --fork=True >myApp.log 2>&1")

我用以下代码来实现创建子进程:

if settings.fork:
    child_pid = os.fork()
    if child_pid == 0:
        print "Starting Child Process: PID# %s" % os.getpid()
    else:
        print "Terminating Parent Process: PID# %s" % os.getpid()
        os._exit(0)

问题是,当我执行运行命令后,连接到远程机器,发现程序因为某种未知原因已经退出了。我查看了日志文件,里面什么也没有。

有没有人能告诉我该怎么解决这个问题?非常感谢!!

1 个回答

3

说到“分叉”,有一个Fabric的分支版本,它支持并行执行,并且还有很多其他的改进。

http://tav.espians.com/fabric-python-with-cleaner-api-and-parallel-deployment-support.html

根据你的需求,你可能会想考虑一下这个。


除此之外,我觉得你可以使用 multiprocessing

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    #p.join()

http://docs.python.org/library/multiprocessing.html

撰写回答