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関数がバリアントの 1 つを呼び出すようにします。その後、サブプロセスをos.exec*ポーリングして、停止したものをすべて再生成できます。is_alive()

于 2013-09-19T00:48:14.117 に答える