2011-05-07 49 views
2

我想使用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) 

问题是我做运行命令后,我sshed到远程盒子里,发现程序已经退出,原因不明,我查了一下日志文件,里面什么都没有。

有人可以让我知道我可以如何工作?非常感谢!!

回答

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

+0

还有这个叉:https://github.com/goosemo/fabric – zeekay 2011-05-07 18:32:54

+2

面料肯定需要某种形式的并行执行。 – zeekay 2011-05-07 18:33:58

+0

并行部署/执行是真棒,我可以肯定会尝试。但我的问题是,当我需要使用“运行”在远程框中运行程序时,我想知道如何使程序连续运行,即使结构的运行命令已返回(我的例子是在程序内部执行os.fork() fork一个子进程,并将所有输出/错误重定向到一个日志文件。) – Sheng 2011-05-09 13:46:03