2013-09-18 3 views
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) 

Какие еще есть пути, чтобы сделать то, что я пытаюсь сделать? Какой из них лучший и почему?

Заранее благодарен!

ответ

0

Используйте multiprocessing для управления пулом процессов и вызовите функцию target, чтобы вызвать реальный исполняемый файл сервера одним из вариантов os.exec*. Затем вы можете опросить is_alive() подпроцессов, чтобы возродить все, что умерло.

Смежные вопросы