1

我想制作一个应用程序,它根据数据库中的数据启动多个游戏服务器,然后在它们崩溃时重新启动它们,并在应用程序退出时停止它们。

我想知道我的示例代码是否很好,或者我是否应该使用另一种方法。

这有什么缺点吗?

到目前为止我的代码:

import shlex
import subprocess
import time

# replace following with a database
servers = [
    {
        "name": "Server #1",
        "path": "/home/myuser/server1/",
        "executable": "srcds_linux",
        "options": "-switches -n -stuff"
    },
    {
        "name": "Server #2",
        "path": "/home/myuser/server2/",
        "executable": "srcds_linux",
        "options": "-some -other -switches"
    }
]

if __name__ == "__main__":
    processes = []

    for server in servers:
        print "Starting server '%s'" % server["name"]

        process = subprocess.Popen(
            shlex.split("./%s %s" % (server["executable"], server["options"])),
            cwd=server["path"]

            # stdin=...
            # stdout=...
        )

        processes.append(process)

    while True:
        # check if all processes are running, else restart them..

        time.sleep(1)

还有什么其他方法可以完成我想做的事情?哪一个是最好的,为什么?

提前致谢!

4

1 回答 1

0

用于multiprocessing管理您的进程池,并让target函数调用其中一种os.exec*变体来启动实际的服务器可执行文件。然后,您可以轮询is_alive()子进程以重生任何死去的东西。

于 2013-09-19T00:48:14.117 回答